10.x 648c8656557b cached
122 files
400.2 KB
90.0k tokens
494 symbols
1 requests
Download .txt
Showing preview only (438K chars total). Download the full file or copy to clipboard to get everything.
Repository: rgvlee/EntityFrameworkCore.Testing
Branch: 10.x
Commit: 648c8656557b
Files: 122
Total size: 400.2 KB

Directory structure:
gitextract_5vjkh0op/

├── .github/
│   └── workflows/
│       ├── continuous-integration-checks.yml
│       └── release.yml
├── .gitignore
├── EntityFrameworkCore.Testing.Moq.nuspec
├── EntityFrameworkCore.Testing.NSubstitute.nuspec
├── EntityFrameworkCore.Testing.sln
├── LICENSE
├── README.md
├── TODO.md
├── googlea6bd68d4a55b1e59.html
└── src/
    ├── EntityFrameworkCore.DefaultBehaviour.Tests/
    │   ├── ByTypeDbSetTests.cs
    │   ├── ByTypeReadOnlyDbSetExceptionTests.cs
    │   ├── ByTypeReadOnlyDbSetTests.cs
    │   ├── DbContextTests.cs
    │   ├── EntityFrameworkCore.DefaultBehaviour.Tests.csproj
    │   ├── Issue114Tests.cs
    │   ├── Issue117Tests.cs
    │   ├── Issue49Tests.cs
    │   └── Issue88Tests.cs
    ├── EntityFrameworkCore.Testing.Common/
    │   ├── AsyncEnumerable.cs
    │   ├── AsyncEnumerator.cs
    │   ├── AsyncQueryProvider.cs
    │   ├── EntityFrameworkCore.Testing.Common.csproj
    │   ├── EntityFrameworkCore.Testing.Common.xml
    │   ├── ExceptionMessages.Designer.cs
    │   ├── ExceptionMessages.resx
    │   ├── Helpers/
    │   │   ├── BaseMockedDbContextBuilder.cs
    │   │   ├── BaseMockedDbContextFactory.cs
    │   │   ├── ExpressionHelper.cs
    │   │   ├── IMockedDbContextBuilder.cs
    │   │   ├── MockedDbContextFactoryOptions.cs
    │   │   └── ParameterMatchingHelper.cs
    │   └── QueryRootExpression.cs
    ├── EntityFrameworkCore.Testing.Common.Tests/
    │   ├── AsyncEnumerableTests.cs
    │   ├── BaseForDbContextTests.cs
    │   ├── BaseForDbSetTests.cs
    │   ├── BaseForMockedQueryableTests.cs
    │   ├── BaseForQueryableTests.cs
    │   ├── BaseForReadOnlyDbSetTests.cs
    │   ├── BaseForTests.cs
    │   ├── BaseTestEntity.cs
    │   ├── EntityFrameworkCore.Testing.Common.Tests.csproj
    │   ├── Issue114Tests.cs
    │   ├── Issue117Tests.cs
    │   ├── Issue126Tests.cs
    │   ├── Issue49Tests.cs
    │   ├── Issue88Tests.cs
    │   ├── MappingProfile.cs
    │   ├── NotRegisteredEntity.cs
    │   ├── ReadOnlyDbSetExceptionTests.cs
    │   ├── TestDbContext.cs
    │   ├── TestEntity.cs
    │   ├── TestReadOnlyEntity.cs
    │   └── TestViewModel.cs
    ├── EntityFrameworkCore.Testing.Moq/
    │   ├── Create.cs
    │   ├── EntityFrameworkCore.Testing.Moq.csproj
    │   ├── EntityFrameworkCore.Testing.Moq.xml
    │   ├── Extensions/
    │   │   ├── DbContextExtensions.cs
    │   │   ├── DbSetExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.cs
    │   │   ├── QueryableExtensions.cs
    │   │   ├── ReadOnlyDbSetExtensions.Internal.cs
    │   │   └── ReadOnlyDbSetExtensions.cs
    │   └── Helpers/
    │       ├── MockedDbContextBuilder.cs
    │       ├── MockedDbContextFactory.Internal.cs
    │       └── NoSetUpDefaultValueProvider.cs
    ├── EntityFrameworkCore.Testing.Moq.Tests/
    │   ├── BaseForDbContextTests.cs
    │   ├── BaseForDbQueryTests.cs
    │   ├── BaseForDbSetTests.cs
    │   ├── ByPropertyDbSetTests.cs
    │   ├── ByPropertyReadOnlyDbSetExceptionTests.cs
    │   ├── ByPropertyReadOnlyDbSetTests.cs
    │   ├── ByTypeDbSetTests.cs
    │   ├── ByTypeReadOnlyDbSetExceptionTests.cs
    │   ├── ByTypeReadOnlyDbSetTests.cs
    │   ├── CreateFactoryTests.cs
    │   ├── DbContextTestsUsingConstructorParameters.cs
    │   ├── DbContextTestsUsingType.cs
    │   ├── EntityFrameworkCore.Testing.Moq.Tests.csproj
    │   ├── Issue114Tests.cs
    │   ├── Issue117Tests.cs
    │   ├── Issue126Tests.cs
    │   ├── Issue1Tests.cs
    │   ├── Issue49Tests.cs
    │   ├── Issue4Tests.cs
    │   ├── Issue6Tests.cs
    │   └── Issue88Tests.cs
    ├── EntityFrameworkCore.Testing.NSubstitute/
    │   ├── Create.cs
    │   ├── EntityFrameworkCore.Testing.NSubstitute.csproj
    │   ├── EntityFrameworkCore.Testing.NSubstitute.xml
    │   ├── Extensions/
    │   │   ├── DbContextExtensions.cs
    │   │   ├── DbSetExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.cs
    │   │   ├── QueryableExtensions.cs
    │   │   ├── ReadOnlyDbSetExtensions.Internal.cs
    │   │   └── ReadOnlyDbSetExtensions.cs
    │   └── Helpers/
    │       ├── MockedDbContextBuilder.cs
    │       ├── MockedDbContextFactory.Internal.cs
    │       └── NoSetUpHandler.cs
    └── EntityFrameworkCore.Testing.NSubstitute.Tests/
        ├── BaseForDbContextTests.cs
        ├── BaseForDbQueryTests.cs
        ├── BaseForDbSetTests.cs
        ├── ByPropertyDbSetTests.cs
        ├── ByPropertyReadOnlyDbSetExceptionTests.cs
        ├── ByPropertyReadOnlyDbSetTests.cs
        ├── ByTypeDbSetTests.cs
        ├── ByTypeReadOnlyDbSetExceptionTests.cs
        ├── ByTypeReadOnlyDbSetTests.cs
        ├── CreateFactoryTests.cs
        ├── DbContextTestsUsingConstructorParameters.cs
        ├── DbContextTestsUsingType.cs
        ├── EntityFrameworkCore.Testing.NSubstitute.Tests.csproj
        ├── Issue114Tests.cs
        ├── Issue117Tests.cs
        ├── Issue126Tests.cs
        ├── Issue1Tests.cs
        ├── Issue49Tests.cs
        ├── Issue4Tests.cs
        ├── Issue6Tests.cs
        └── Issue88Tests.cs

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/continuous-integration-checks.yml
================================================
name: Continuous Integration Checks

on:
  push:
  schedule:
    - cron: "0 9 * * 3"

jobs:
  build-and-test:
    name: Build and test
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Setup dotnet
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: 10.0.x

      - name: Build
        run: dotnet build --configuration Release

#      - name: List dependencies
#        run: dotnet list EntityFrameworkCore.Testing.sln package

      - name: Test
        run: dotnet test --configuration Release --no-build /p:CollectCoverage=\"true\" /p:Exclude=\"[*.Tests]*,[rgvlee.Core.*]*\" /p:SkipAutoProps=\"false\" /p:IncludeTestAssembly=\"false\" /p:CoverletOutput=\"../../CoverageResults/\" /p:MergeWith=\"../../CoverageResults/coverage.json\" /p:CoverletOutputFormat=\"opencover,json\" -m:1

      - name: Update dependencies
        run: |
          dotnet add src/EntityFrameworkCore.Testing.Common package Microsoft.EntityFrameworkCore.InMemory --version 10.*-*
          dotnet add src/EntityFrameworkCore.Testing.Common package Microsoft.EntityFrameworkCore.Relational --version 10.*-*
          dotnet add src/EntityFrameworkCore.Testing.Common package Microsoft.Extensions.Logging --version 10.*-*
          dotnet add src/EntityFrameworkCore.Testing.Common package rgvlee.Core

          dotnet add src/EntityFrameworkCore.Testing.Common.Tests package Microsoft.Extensions.Logging.Console --version 10.*-*

          dotnet add src/EntityFrameworkCore.Testing.Moq package Moq

          dotnet add src/EntityFrameworkCore.Testing.NSubstitute package NSubstitute

#      - name: List dependencies
#        run: dotnet list EntityFrameworkCore.Testing.sln package

      - name: Test with updated dependencies
        run: dotnet test --configuration Release /p:CollectCoverage=\"false\" /p:Exclude=\"[*.Tests]*,[rgvlee.Core.*]*\" /p:SkipAutoProps=\"false\" /p:IncludeTestAssembly=\"false\" -m:1

      - name: Send coverage results to Codacy
        uses: codacy/codacy-coverage-reporter-action@master
        with:
          project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
          coverage-reports: ./CoverageResults/coverage.*opencover.xml

================================================
FILE: .github/workflows/release.yml
================================================
name: Release

on:
  release:
    types: [published]

jobs:
  build-and-test:
    name: Build, pack and push
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Setup dotnet
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: 10.0.x

      - run: sudo apt install mono-devel

      - name: Setup NuGet
        uses: nuget/setup-nuget@v2
        with:
          nuget-version: latest

      - name: Build
        run: dotnet build --configuration Release

      - name: Pack
        run: |
          nuget pack EntityFrameworkCore.Testing.Moq.nuspec -Version ${{ github.event.release.name }} -Symbols -SymbolPackageFormat snupkg
          nuget pack EntityFrameworkCore.Testing.NSubstitute.nuspec -Version ${{ github.event.release.name }} -Symbols -SymbolPackageFormat snupkg

      - name: Push
        run: |
          nuget push EntityFrameworkCore.Testing.Moq*.nupkg -Source https://api.nuget.org/v3/index.json -ApiKey ${{ secrets.NUGET_API_KEY }}
          nuget push EntityFrameworkCore.Testing.NSubstitute*.nupkg -Source https://api.nuget.org/v3/index.json -ApiKey ${{ secrets.NUGET_API_KEY }}

================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk 
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output 
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder 
.mfractor/


================================================
FILE: EntityFrameworkCore.Testing.Moq.nuspec
================================================
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>EntityFrameworkCore.Testing.Moq</id>
    <version>10.0.0</version>
    <authors>rgvlee</authors>
    <owners>rgvlee</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="file">LICENSE</license>
    <projectUrl>https://github.com/rgvlee/EntityFrameworkCore.Testing</projectUrl>
    <description>Adds relational support to the Microsoft EntityFrameworkCore in-memory database provider by mocking relational operations.

EntityFrameworkCore.Testing v1.x = EntityFrameworkCore 2 (2.1.0+)
EntityFrameworkCore.Testing v2.x = EntityFrameworkCore 3
EntityFrameworkCore.Testing v3.x = EntityFrameworkCore 5
EntityFrameworkCore.Testing v4.x = EntityFrameworkCore 6
EntityFrameworkCore.Testing v5.x = EntityFrameworkCore 7
EntityFrameworkCore.Testing v8.x = EntityFrameworkCore 8
EntityFrameworkCore.Testing v9.x = EntityFrameworkCore 9
EntityFrameworkCore.Testing v10.x = EntityFrameworkCore 10</description>
    <copyright>Copyright (c) 2025 Lee Anderson</copyright>
    <tags>EntityFrameworkCore EFCore Moq mock testing</tags>
    <repository url="https://github.com/rgvlee/EntityFrameworkCore.Testing" />
    <dependencies>
      <group targetFramework="net10.0">
        <dependency id="Microsoft.EntityFrameworkCore.InMemory" version="[10,11)" exclude="Build,Analyzers" />
        <dependency id="Microsoft.EntityFrameworkCore.Relational" version="[10,11)" exclude="Build,Analyzers" />
        <dependency id="Microsoft.Extensions.Logging" version="[10,)" exclude="Build,Analyzers" />
        <dependency id="Moq" version="4.9.0" exclude="Build,Analyzers" />
        <dependency id="rgvlee.Core" version="1.2.1" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="src\EntityFrameworkCore.Testing.Common\bin\Release\net10.0\EntityFrameworkCore.Testing.Common.dll" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.Common\bin\Release\net10.0\EntityFrameworkCore.Testing.Common.pdb" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.Common\bin\Release\net10.0\EntityFrameworkCore.Testing.Common.xml" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.Moq\bin\Release\net10.0\EntityFrameworkCore.Testing.Moq.dll" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.Moq\bin\Release\net10.0\EntityFrameworkCore.Testing.Moq.pdb" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.Moq\bin\Release\net10.0\EntityFrameworkCore.Testing.Moq.xml" target="lib\net10.0" />
    <file src="LICENSE" />
  </files>
</package>

================================================
FILE: EntityFrameworkCore.Testing.NSubstitute.nuspec
================================================
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>EntityFrameworkCore.Testing.NSubstitute</id>
    <version>10.0.0</version>
    <authors>rgvlee</authors>
    <owners>rgvlee</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="file">LICENSE</license>
    <projectUrl>https://github.com/rgvlee/EntityFrameworkCore.Testing</projectUrl>
    <description>Adds relational support to the Microsoft EntityFrameworkCore in-memory database provider by mocking relational operations.

EntityFrameworkCore.Testing v1.x = EntityFrameworkCore 2 (2.1.0+)
EntityFrameworkCore.Testing v2.x = EntityFrameworkCore 3
EntityFrameworkCore.Testing v3.x = EntityFrameworkCore 5
EntityFrameworkCore.Testing v4.x = EntityFrameworkCore 6
EntityFrameworkCore.Testing v5.x = EntityFrameworkCore 7
EntityFrameworkCore.Testing v8.x = EntityFrameworkCore 8
EntityFrameworkCore.Testing v9.x = EntityFrameworkCore 9
EntityFrameworkCore.Testing v10.x = EntityFrameworkCore 10</description>
    <copyright>Copyright (c) 2025 Lee Anderson</copyright>
    <tags>EntityFrameworkCore EFCore NSubstitute nsub mock testing</tags>
    <repository url="https://github.com/rgvlee/EntityFrameworkCore.Testing" />
    <dependencies>
      <group targetFramework="net10.0">
        <dependency id="Microsoft.EntityFrameworkCore.InMemory" version="[10,11)" exclude="Build,Analyzers" />
        <dependency id="Microsoft.EntityFrameworkCore.Relational" version="[10,11)" exclude="Build,Analyzers" />
        <dependency id="Microsoft.Extensions.Logging" version="[10,)" exclude="Build,Analyzers" />
        <dependency id="NSubstitute" version="4.1.0" exclude="Build,Analyzers" />
        <dependency id="rgvlee.Core" version="1.2.1" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="src\EntityFrameworkCore.Testing.Common\bin\Release\net10.0\EntityFrameworkCore.Testing.Common.dll" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.Common\bin\Release\net10.0\EntityFrameworkCore.Testing.Common.pdb" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.Common\bin\Release\net10.0\EntityFrameworkCore.Testing.Common.xml" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.NSubstitute\bin\Release\net10.0\EntityFrameworkCore.Testing.NSubstitute.dll" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.NSubstitute\bin\Release\net10.0\EntityFrameworkCore.Testing.NSubstitute.pdb" target="lib\net10.0" />
    <file src="src\EntityFrameworkCore.Testing.NSubstitute\bin\Release\net10.0\EntityFrameworkCore.Testing.NSubstitute.xml" target="lib\net10.0" />
    <file src="LICENSE" />
  </files>
</package>

================================================
FILE: EntityFrameworkCore.Testing.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32811.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F7DF11CE-7549-4808-B9BE-66CE1BD1F150}"
	ProjectSection(SolutionItems) = preProject
		.gitignore = .gitignore
		.github\workflows\continuous-integration-checks.yml = .github\workflows\continuous-integration-checks.yml
		src\EntityFrameworkCore.Testing.Common\EntityFrameworkCore.Testing.Common.xml = src\EntityFrameworkCore.Testing.Common\EntityFrameworkCore.Testing.Common.xml
		EntityFrameworkCore.Testing.Moq.nuspec = EntityFrameworkCore.Testing.Moq.nuspec
		src\EntityFrameworkCore.Testing.Moq\EntityFrameworkCore.Testing.Moq.xml = src\EntityFrameworkCore.Testing.Moq\EntityFrameworkCore.Testing.Moq.xml
		EntityFrameworkCore.Testing.NSubstitute.nuspec = EntityFrameworkCore.Testing.NSubstitute.nuspec
		src\EntityFrameworkCore.Testing.NSubstitute\EntityFrameworkCore.Testing.NSubstitute.xml = src\EntityFrameworkCore.Testing.NSubstitute\EntityFrameworkCore.Testing.NSubstitute.xml
		googlea6bd68d4a55b1e59.html = googlea6bd68d4a55b1e59.html
		LICENSE = LICENSE
		README.md = README.md
		.github\workflows\release.yml = .github\workflows\release.yml
		TODO.md = TODO.md
	EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.Testing.Moq", "src\EntityFrameworkCore.Testing.Moq\EntityFrameworkCore.Testing.Moq.csproj", "{3A00A558-6614-4D2C-8BC0-A74EFBB8F844}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.Testing.Moq.Tests", "src\EntityFrameworkCore.Testing.Moq.Tests\EntityFrameworkCore.Testing.Moq.Tests.csproj", "{6567AA47-8E4D-4E69-8075-B8C25DC7F4A4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5B717CD0-96CD-4862-95EB-80ECCDCD1D07}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.Testing.Common", "src\EntityFrameworkCore.Testing.Common\EntityFrameworkCore.Testing.Common.csproj", "{F2211544-E6EA-439A-9C31-3972B48B9D5E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.Testing.Common.Tests", "src\EntityFrameworkCore.Testing.Common.Tests\EntityFrameworkCore.Testing.Common.Tests.csproj", "{4B97C16B-E27D-4900-A535-6D5AC116B893}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.DefaultBehaviour.Tests", "src\EntityFrameworkCore.DefaultBehaviour.Tests\EntityFrameworkCore.DefaultBehaviour.Tests.csproj", "{9C08E46C-C902-473F-93E6-FCB89DEC8C97}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.Testing.NSubstitute", "src\EntityFrameworkCore.Testing.NSubstitute\EntityFrameworkCore.Testing.NSubstitute.csproj", "{A70976F0-38EA-461C-9BDE-BEE8232B048D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.Testing.NSubstitute.Tests", "src\EntityFrameworkCore.Testing.NSubstitute.Tests\EntityFrameworkCore.Testing.NSubstitute.Tests.csproj", "{2F67273D-B7B8-49A5-9A91-E37CBC10F563}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{3A00A558-6614-4D2C-8BC0-A74EFBB8F844}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3A00A558-6614-4D2C-8BC0-A74EFBB8F844}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3A00A558-6614-4D2C-8BC0-A74EFBB8F844}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3A00A558-6614-4D2C-8BC0-A74EFBB8F844}.Release|Any CPU.Build.0 = Release|Any CPU
		{6567AA47-8E4D-4E69-8075-B8C25DC7F4A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{6567AA47-8E4D-4E69-8075-B8C25DC7F4A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{6567AA47-8E4D-4E69-8075-B8C25DC7F4A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{6567AA47-8E4D-4E69-8075-B8C25DC7F4A4}.Release|Any CPU.Build.0 = Release|Any CPU
		{F2211544-E6EA-439A-9C31-3972B48B9D5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F2211544-E6EA-439A-9C31-3972B48B9D5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F2211544-E6EA-439A-9C31-3972B48B9D5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F2211544-E6EA-439A-9C31-3972B48B9D5E}.Release|Any CPU.Build.0 = Release|Any CPU
		{4B97C16B-E27D-4900-A535-6D5AC116B893}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4B97C16B-E27D-4900-A535-6D5AC116B893}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4B97C16B-E27D-4900-A535-6D5AC116B893}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4B97C16B-E27D-4900-A535-6D5AC116B893}.Release|Any CPU.Build.0 = Release|Any CPU
		{9C08E46C-C902-473F-93E6-FCB89DEC8C97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{9C08E46C-C902-473F-93E6-FCB89DEC8C97}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{9C08E46C-C902-473F-93E6-FCB89DEC8C97}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{9C08E46C-C902-473F-93E6-FCB89DEC8C97}.Release|Any CPU.Build.0 = Release|Any CPU
		{A70976F0-38EA-461C-9BDE-BEE8232B048D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A70976F0-38EA-461C-9BDE-BEE8232B048D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A70976F0-38EA-461C-9BDE-BEE8232B048D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A70976F0-38EA-461C-9BDE-BEE8232B048D}.Release|Any CPU.Build.0 = Release|Any CPU
		{2F67273D-B7B8-49A5-9A91-E37CBC10F563}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{2F67273D-B7B8-49A5-9A91-E37CBC10F563}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{2F67273D-B7B8-49A5-9A91-E37CBC10F563}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{2F67273D-B7B8-49A5-9A91-E37CBC10F563}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{6567AA47-8E4D-4E69-8075-B8C25DC7F4A4} = {5B717CD0-96CD-4862-95EB-80ECCDCD1D07}
		{4B97C16B-E27D-4900-A535-6D5AC116B893} = {5B717CD0-96CD-4862-95EB-80ECCDCD1D07}
		{9C08E46C-C902-473F-93E6-FCB89DEC8C97} = {5B717CD0-96CD-4862-95EB-80ECCDCD1D07}
		{2F67273D-B7B8-49A5-9A91-E37CBC10F563} = {5B717CD0-96CD-4862-95EB-80ECCDCD1D07}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {0E585345-42EF-438B-8212-2C328D36D9AD}
	EndGlobalSection
EndGlobal


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2025 Lee Anderson

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# EntityFrameworkCore.Testing

[![Codacy Badge](https://app.codacy.com/project/badge/Grade/6d641ce391264f45b99acee8694a88d6?branch=10.x)](https://www.codacy.com/manual/rgvlee/EntityFrameworkCore.Testing?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=rgvlee/EntityFrameworkCore.Testing&amp;utm_campaign=Badge_Grade) [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/6d641ce391264f45b99acee8694a88d6?branch=10.x)](https://www.codacy.com/manual/rgvlee/EntityFrameworkCore.Testing?utm_source=github.com&utm_medium=referral&utm_content=rgvlee/EntityFrameworkCore.Testing&utm_campaign=Badge_Coverage)

## Overview

EntityFrameworkCore.Testing adds relational support to the Microsoft EntityFrameworkCore in-memory database provider by mocking relational operations. It's easy to use (usually just a single line of code) with implementations for both Moq and NSubstitute.

The aim of this library is to allow you use the in-memory database provider in unit tests where the SUT invokes a relational operation. It'll allow you to specify expected results for these relational operations. It does not test your relational operations.

[Microsoft does not recommend mocking a db context](https://docs.microsoft.com/en-us/ef/core/testing/#unit-testing) and EntityFrameworkCore.Testing follows this advice by sending operations supported by the in-memory database provider to the in-memory database provider.

### EntityFrameworkCore 10

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/10.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/10.0.0)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/10.0.0)

### EntityFrameworkCore 9

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/9.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/9.0.2)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/9.0.2)

### EntityFrameworkCore 8

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/8.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/8.1.2)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/8.1.2)

### EntityFrameworkCore 7

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/5.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/5.0.0)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/5.0.0)

### EntityFrameworkCore 6

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/4.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/4.0.2)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/4.0.2)

### EntityFrameworkCore 5

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/3.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/3.0.5)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/3.0.5)

### EntityFrameworkCore 3

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/2.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/2.4.5)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/2.4.5)

### EntityFrameworkCore 2 (2.1.0+)

- [Source](https://github.com/rgvlee/EntityFrameworkCore.Testing/tree/1.x)
- [EntityFrameworkCore.Testing.Moq - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.Moq/1.3.5)
- [EntityFrameworkCore.Testing.NSubstitute - NuGet](https://www.nuget.org/packages/EntityFrameworkCore.Testing.NSubstitute/1.3.5)

## Prerequisites

### An accessible constructor

Your db context must have an accessible constructor.

### Virtual sets/queries

Your db context set/query properties must be overridable:

```c#
public virtual DbSet<TestEntity> TestEntities { get; set; }
```

## Creating a mocked DbContext

If your db context has an accessible constructor with a single `DbContextOptions` or `DbContextOptions<TDbContext>` parameter, creating a mocked db context is as easy as:

```c#
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
```

Any accessible constructor can be used provided it has a `DbContextOptions` or `DbContextOptions<TDbContext>` parameter:

```c#
var mockedLogger = Mock.Of<ILogger<TestDbContext>>();
var dbContextOptions = new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options;
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>(mockedLogger, dbContextOptions);
```

Both of the above examples automatically create and use a Microsoft in-memory provider instance for the EntityFrameworkCore provider. If you want more control e.g., to specify the EntityFrameworkCore provider instance, use the builder:

```c#
var options = new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options;
var dbContextToMock = new TestDbContext(options);
var mockedDbContext = new MockedDbContextBuilder<TestDbContext>().UseDbContext(dbContextToMock).UseConstructorWithParameters(options).MockedDbContext;
```

There is no requirement to use the Microsoft in-memory provider. The following example uses the SQLite in-memory provider for a db context with a parameterless constructor:

```c#
using (var connection = new SqliteConnection("Filename=:memory:"))
{
    connection.Open();
    var testEntity = _fixture.Create<TestEntity>();
    var dbContextToMock = new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseSqlite(connection).Options);
    dbContextToMock.Database.EnsureCreated();
    var mockedDbContext = new MockedDbContextBuilder<TestDbContext>().UseDbContext(dbContextToMock).MockedDbContext;

    mockedDbContext.Set<TestEntity>().Add(testEntity);
    mockedDbContext.SaveChanges();

    Assert.Multiple(() =>
    {
        Assert.AreNotEqual(default(Guid), testEntity.Id);
        Assert.DoesNotThrow(() => mockedDbContext.Set<TestEntity>().Single());
        Assert.AreEqual(testEntity, mockedDbContext.Find<TestEntity>(testEntity.Id));
    });
}
```

## Usage

Start by creating a mocked db context and, if the SUT requires, populate it as if you were using the real thing:

```c#
var testEntity = _fixture.Create<TestEntity>();
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
mockedDbContext.Set<TestEntity>().Add(testEntity);
mockedDbContext.SaveChanges();

Assert.Multiple(() =>
{
    Assert.AreNotEqual(default(Guid), testEntity.Id);
    Assert.DoesNotThrow(() => mockedDbContext.Set<TestEntity>().Single());
    Assert.AreEqual(testEntity, mockedDbContext.Find<TestEntity>(testEntity.Id));
});
```

The Moq implementation of `Create.MockedDbContextFor<T>()` returns the mocked db context. If you need the mock itself (e.g., to verify an invocation) use `Mock.Get(mockedDbSet)`:

```c#
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
mockedDbContext.Set<TestEntity>().AddRange(_fixture.CreateMany<TestEntity>().ToList());
mockedDbContext.SaveChanges();

Assert.Multiple(() =>
{
    var dbContextMock = Mock.Get(mockedDbContext);
    dbContextMock.Verify(m => m.SaveChanges(), Times.Once);
});
```

### FromSql

Use `AddFromSqlResult` to add a from SQL result to the mock. The following will return `expectedResult` for any `FromSql<TestEntity>` invocation:

```c#
var expectedResult = _fixture.CreateMany<TestEntity>().ToList();
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
mockedDbContext.Set<TestEntity>().AddFromSqlRawResult(expectedResult);

var actualResult = mockedDbContext.Set<TestEntity>().FromSqlRaw("[dbo].[USP_StoredProcedureWithNoParameters]").ToList();

Assert.Multiple(() =>
{
    Assert.IsNotNull(actualResult);
    Assert.IsTrue(actualResult.Any());
    CollectionAssert.AreEquivalent(expectedResult, actualResult);
});
```

The following will return `expectedResult` if the `FromSql` SQL query text contains `usp_StoredProcedureWithParameters` and a `@Parameter2` SQL parameter with a value of `Value2` has been provided:

```c#
var expectedResult = _fixture.CreateMany<TestEntity>().ToList();
var sqlParameters = new List<SqlParameter> { new SqlParameter("@Parameter2", "Value2") };
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
mockedDbContext.Set<TestEntity>().AddFromSqlRawResult("usp_StoredProcedureWithParameters", sqlParameters, expectedResult);

var actualResult = mockedDbContext.Set<TestEntity>()
    .FromSqlRaw("[dbo].[USP_StoredProcedureWithParameters] @Parameter1 @Parameter2",
        new SqlParameter("@parameter1", "Value1"),
        new SqlParameter("@parameter2", "value2"))
    .ToList();

Assert.Multiple(() =>
{
    Assert.IsNotNull(actualResult);
    Assert.IsTrue(actualResult.Any());
    CollectionAssert.AreEquivalent(expectedResult, actualResult);
});
```

SQL query text matching supports partial, case insensitive matches. Individual parameter name and value matching is also case insensitive. Case insensitive interpolated strings are also supported:

```c#
var expectedResult = _fixture.CreateMany<TestEntity>().ToList();
var parameter1 = _fixture.Create<DateTime>();
var parameter2 = _fixture.Create<string>();
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
mockedDbContext.Set<TestEntity>().AddFromSqlInterpolatedResult($"usp_StoredProcedureWithParameters {parameter1}, {parameter2.ToUpper()}", expectedResult);

var actualResult = mockedDbContext.Set<TestEntity>().FromSqlInterpolated($"USP_StoredProcedureWithParameters {parameter1}, {parameter2.ToLower()}").ToList();

Assert.Multiple(() =>
{
    Assert.IsNotNull(actualResult);
    Assert.IsTrue(actualResult.Any());
    CollectionAssert.AreEquivalent(expectedResult, actualResult);
});
```

### FromSqlRaw/FromSqlInterpolated (EntityFrameworkCore 3.\*)

Use `AddFromSqlRawResult` and `AddFromSqlInterpolatedResult` to add results for `FromSqlRaw` and `FromSqlInterpolated` invocations. Refer to the FromSql section above for usage.

### Queries

Use `AddToReadOnlySource`, `AddRangeToReadOnlySource` and `ClearReadOnlySource` to manage a query source.

```c#
var expectedResult = _fixture.CreateMany<TestReadOnlyEntity>().ToList();
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();

mockedDbContext.Set<TestReadOnlyEntity>().AddRangeToReadOnlySource(expectedResult);

Assert.Multiple(() =>
{
    CollectionAssert.AreEquivalent(expectedResult, mockedDbContext.Set<TestReadOnlyEntity>().ToList());
    CollectionAssert.AreEquivalent(mockedDbContext.Set<TestReadOnlyEntity>().ToList(), mockedDbContext.TestReadOnlyEntities.ToList());
});
```

Specifying a from SQL result for a query is exactly the same as for a set.

### Keyless Sets (EntityFrameworkCore 3.\*)

Refer to the Queries section above for usage.

### ExecuteSqlCommand

Adding an execute SQL command result is similar to adding a from SQL result with the main difference being the return type. `ExecuteSqlCommand` returns an `int` (the number of rows affected by executing the SQL command text).

```c#
var commandText = "usp_StoredProcedureWithNoParameters";
var expectedResult = 1;
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
mockedDbContext.AddExecuteSqlRawResult(commandText, new List<SqlParameter>(), expectedResult);

var result = mockedDbContext.Database.ExecuteSqlRaw("USP_StoredProcedureWithNoParameters");

Assert.AreEqual(expectedResult, result);
```

All of the overloads have an optional `Action<string, IEnumerable<object>>` parameter which allows you to perform operations post invocation. The following provides a basic example where invoking `ExecuteSqlCommand` deletes a specified number of rows from a set:

```c#
//Arrange
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();

var itemsToCreate = 100;
mockedDbContext.Set<TestEntity>().AddRange(_fixture.CreateMany<TestEntity>(itemsToCreate).ToList());
mockedDbContext.SaveChanges();

var numberOfRowsToDelete = itemsToCreate / 2;
var rowsToDelete = mockedDbContext.Set<TestEntity>().Take(numberOfRowsToDelete).ToList();
var remainingRows = mockedDbContext.Set<TestEntity>().Skip(numberOfRowsToDelete).ToList();

mockedDbContext.AddExecuteSqlRawResult("usp_MyStoredProc",
    numberOfRowsToDelete,
    (providedSql, providedParameters) =>
    {
        mockedDbContext.Set<TestEntity>().RemoveRange(rowsToDelete);
        mockedDbContext.SaveChanges();
    });

//Act
var actualResult = mockedDbContext.Database.ExecuteSqlRaw($"usp_MyStoredProc {numberOfRowsToDelete}");

//Assert
Assert.Multiple(() =>
{
    Assert.That(actualResult, Is.EqualTo(numberOfRowsToDelete));
    Assert.That(mockedDbContext.Set<TestEntity>().Count(), Is.EqualTo(itemsToCreate - numberOfRowsToDelete));
    Assert.That(mockedDbContext.Set<TestEntity>().ToList(), Is.EquivalentTo(remainingRows));
});
```

### ExecuteSqlRaw/ExecuteSqlInterpolated (EntityFrameworkCore 3.\*)

Use `AddExecuteSqlRawResult` and `AddExecuteSqlInterpolatedResult` to add results for `ExecuteSqlRaw` and `ExecuteSqlInterpolated` invocations. Refer to the ExecuteSqlCommand section above for usage.

### Async and LINQ queryable operations

Whenever you add a from SQL or execute SQL command result, EntityFrameworkCore.Testing sets up both the sync and async methods. It also automatically provides support for all sync and async LINQ queryable operations that are not supported by the Microsoft in-memory provider.

### Asserting mock invocations

The db context and each set, query and their respective query providers are separate mocks. The following Moq example asserts that the `DbContext.SaveChanges` and `DbSet<TestEntity>.AddRange` methods were both invoked once.

```c#
var mockedDbContext = Create.MockedDbContextFor<TestDbContext>();
mockedDbContext.Set<TestEntity>().AddRange(_fixture.CreateMany<TestEntity>().ToList());
mockedDbContext.SaveChanges();

var dbContextMock = Mock.Get(mockedDbContext);
dbContextMock.Verify(m => m.SaveChanges(), Times.Once);

var byTypeDbSetMock = Mock.Get(mockedDbContext.Set<TestEntity>());
byTypeDbSetMock.Verify(m => m.AddRange(It.IsAny<IEnumerable<TestEntity>>()), Times.Once);

var byPropertyDbSetMock = Mock.Get(mockedDbContext.TestEntities);
byPropertyDbSetMock.Verify(m => m.AddRange(It.IsAny<IEnumerable<TestEntity>>()), Times.Once);
```


================================================
FILE: TODO.md
================================================
# TODO

- Add tests for untested functionality
- Remove repeated set up code
- Unify test structures to assist with cross project comparisons
- Add default behaviour tests for SQL Server provider


================================================
FILE: googlea6bd68d4a55b1e59.html
================================================
google-site-verification: googlea6bd68d4a55b1e59.html

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeDbSetTests.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoFixture;
using EntityFrameworkCore.Testing.Common.Tests;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;
using static FluentAssertions.FluentActions;

namespace EntityFrameworkCore.DefaultBehaviour.Tests;

public class ByTypeDbSetTests : BaseForQueryableTests<TestEntity>
{
    protected TestDbContext DbContext;

    protected DbSet<TestEntity> DbSet => DbContext.Set<TestEntity>();

    protected override IQueryable<TestEntity> Queryable => DbSet;

    [SetUp]
    public override void SetUp()
    {
        base.SetUp();

        DbContext = new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
    }

    protected override void SeedQueryableSource()
    {
        var itemsToAdd = Fixture.Build<TestEntity>().With(p => p.CreatedAt, DateTime.Today).With(p => p.LastModifiedAt, DateTime.Today).CreateMany().ToList();
        DbContext.Set<TestEntity>().AddRange(itemsToAdd);
        DbContext.SaveChanges();
        ItemsAddedToQueryableSource = itemsToAdd;
    }

    [Test]
    public virtual async Task AsAsyncEnumerable_ReturnsAsyncEnumerable()
    {
        var expectedResult = Fixture.Create<TestEntity>();
        DbSet.Add(expectedResult);
        DbContext.SaveChanges();

        var asyncEnumerable = DbSet.AsAsyncEnumerable();

        var actualResults = new List<TestEntity>();
        await foreach (var item in asyncEnumerable) actualResults.Add(item);

        Assert.Multiple(() =>
        {
            Assert.That(actualResults.Single(), Is.EqualTo(expectedResult));
            Assert.That(actualResults.Single(), Is.EqualTo(expectedResult));
        });
    }

    [Test]
    public virtual void AsQueryable_ReturnsQueryable()
    {
        var expectedResult = Fixture.Create<TestEntity>();
        DbSet.Add(expectedResult);
        DbContext.SaveChanges();

        var queryable = DbSet.AsQueryable();

        Assert.Multiple(() =>
        {
            Assert.That(queryable.Single(), Is.EqualTo(expectedResult));
            Assert.That(queryable.Single(), Is.EqualTo(expectedResult));
        });
    }

    [Test]
    public virtual void FromSqlInterpolated_ThrowsException()
    {
        Invoking(() => DbSet.FromSqlInterpolated($"sp_NoParams").ToList()).Should().ThrowExactly<InvalidOperationException>();
    }

    [Test]
    public virtual void FromSqlRaw_ThrowsException()
    {
        Invoking(() => DbSet.FromSqlRaw("sp_NoParams").ToList()).Should().ThrowExactly<InvalidOperationException>();
    }
}

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeReadOnlyDbSetExceptionTests.cs
================================================
using System;
using EntityFrameworkCore.Testing.Common.Tests;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.DefaultBehaviour.Tests
{
    public class ReadOnlyDbSetExceptionTests : ReadOnlyDbSetExceptionTests<TestReadOnlyEntity>
    {
        protected TestDbContext DbContext;

        protected override DbSet<TestReadOnlyEntity> DbSet => DbContext.Set<TestReadOnlyEntity>();

        [SetUp]
        public override void SetUp()
        {
            base.SetUp();

            DbContext = new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeReadOnlyDbSetTests.cs
================================================
using System;
using System.ComponentModel;
using EntityFrameworkCore.Testing.Common.Tests;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.DefaultBehaviour.Tests
{
    public class ByTypeReadOnlyDbSetTests : BaseForTests
    {
        protected TestDbContext DbContext;

        protected DbSet<TestReadOnlyEntity> DbSet => DbContext.Set<TestReadOnlyEntity>();

        [SetUp]
        public override void SetUp()
        {
            base.SetUp();

            DbContext = new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
        }

        [Test]
        public virtual void AsAsyncEnumerable_ReturnsAsyncEnumerable()
        {
            var asyncEnumerable = DbSet.AsAsyncEnumerable();

            Assert.That(asyncEnumerable, Is.Not.Null);
        }

        [Test]
        public virtual void AsQueryable_ReturnsQueryable()
        {
            var queryable = DbSet.AsQueryable();

            Assert.That(queryable, Is.Not.Null);
        }

        [Test]
        public void ContainsListCollection_ReturnsFalse()
        {
            var containsListCollection = ((IListSource) DbSet).ContainsListCollection;
            Assert.That(containsListCollection, Is.False);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/DbContextTests.cs
================================================
using System;
using System.Linq;
using EntityFrameworkCore.Testing.Common;
using EntityFrameworkCore.Testing.Common.Tests;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.DefaultBehaviour.Tests
{
    public class DbContextTests : BaseForTests
    {
        protected TestDbContext DbContext;

        [SetUp]
        public override void SetUp()
        {
            base.SetUp();

            DbContext = new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
        }

        [Test]
        public virtual void ExecuteSqlInterpolated_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult = DbContext.Database.ExecuteSqlInterpolated($"sp_NoParams");
            });
        }

        [Test]
        public virtual void ExecuteSqlRaw_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult = DbContext.Database.ExecuteSqlRaw("sp_NoParams");
            });
        }

        [Test]
        public virtual void Set_TypeNotIncludedInModel_ThrowsException()
        {
            Assert.Multiple(() =>
            {
                var ex = Assert.Throws<InvalidOperationException>(() => DbContext.Set<NotRegisteredEntity>().ToList());
                Assert.That(ex.Message, Is.EqualTo(string.Format(ExceptionMessages.CannotCreateDbSetTypeNotIncludedInModel, nameof(NotRegisteredEntity))));
            });
        }

        [Test]
        public virtual void SetCommandTimeout_ValidTimeout_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                DbContext.Database.SetCommandTimeout(60);
            });
        }

        [Test]
        public virtual void GetCommandTimeout_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                DbContext.Database.GetCommandTimeout();
            });
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/EntityFrameworkCore.DefaultBehaviour.Tests.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <WarningsAsErrors>NU1605</WarningsAsErrors>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <WarningsAsErrors>NU1605</WarningsAsErrors>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NUnit" Version="4.4.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="5.2.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\EntityFrameworkCore.Testing.Common.Tests\EntityFrameworkCore.Testing.Common.Tests.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue114Tests.cs
================================================
using System;
using Microsoft.EntityFrameworkCore;

namespace EntityFrameworkCore.DefaultBehaviour.Tests
{
    public class Issue114Tests : Testing.Common.Tests.Issue114Tests
    {
        protected override TestDbContext MockedDbContextFactory()
        {
            return new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue117Tests.cs
================================================
using System;
using Microsoft.EntityFrameworkCore;

namespace EntityFrameworkCore.DefaultBehaviour.Tests
{
    public class Issue117Tests : Testing.Common.Tests.Issue117Tests
    {
        protected override TestDbContext MockedDbContextFactory()
        {
            return new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue49Tests.cs
================================================
using System;
using EntityFrameworkCore.Testing.Common.Tests;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.DefaultBehaviour.Tests
{
    public class Issue49Tests : Issue49Tests<TestDbContext, TestEntity>
    {
        [SetUp]
        public override void SetUp()
        {
            base.SetUp();

            DbContext = new TestDbContext(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue88Tests.cs
================================================
using System;
using EntityFrameworkCore.Testing.Common.Tests;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using NUnit.Framework;

namespace EntityFrameworkCore.DefaultBehaviour.Tests
{
    public class Issue88Tests : Issue88Tests<TestDbContext, TestEntity>
    {
        [SetUp]
        public override void SetUp()
        {
            base.SetUp();

            var options = new DbContextOptionsBuilder<TestDbContext>()
                .UseInMemoryDatabase(Guid.NewGuid().ToString())
                .ConfigureWarnings(x => x.Ignore(InMemoryEventId.TransactionIgnoredWarning))
                .Options;

            DbContextFactory = () => new TestDbContext(options);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/AsyncEnumerable.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using Microsoft.EntityFrameworkCore.Query;

namespace EntityFrameworkCore.Testing.Common
{
    public class AsyncEnumerable<T> : IAsyncEnumerable<T>, IOrderedQueryable<T>
    {
        private readonly IQueryable<T> _source;

        public AsyncEnumerable(IEnumerable<T> enumerable)
        {
            _source = enumerable.AsQueryable();

            Provider = new AsyncQueryProvider<T>(_source);

            Expression = _source.Expression;
        }

        public AsyncEnumerable(IEnumerable<T> enumerable, QueryRootExpression expression) : this(enumerable)
        {
            Expression = expression;
        }

        public IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = new())
        {
            return new AsyncEnumerator<T>(_source);
        }

        IEnumerator<T> IEnumerable<T>.GetEnumerator()
        {
            return _source.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return _source.GetEnumerator();
        }

        public Type ElementType => typeof(T);

        public Expression Expression { get; }

        public IQueryProvider Provider { get; }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/AsyncEnumerator.cs
================================================
using System.Collections.Generic;
using System.Threading.Tasks;

namespace EntityFrameworkCore.Testing.Common
{
    public class AsyncEnumerator<T> : IAsyncEnumerator<T>
    {
        private readonly IEnumerator<T> _enumerator;

        public AsyncEnumerator(IEnumerable<T> enumerable)
        {
            _enumerator = enumerable.GetEnumerator();
        }

        public ValueTask DisposeAsync()
        {
            return new();
        }

        public ValueTask<bool> MoveNextAsync()
        {
            return new(_enumerator.MoveNext());
        }

        public T Current => _enumerator.Current;
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/AsyncQueryProvider.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.EntityFrameworkCore.Query.Internal;
using Microsoft.Extensions.Logging;
using rgvlee.Core.Common.Helpers;
using ProjectExpressionHelper = EntityFrameworkCore.Testing.Common.Helpers.ExpressionHelper;

namespace EntityFrameworkCore.Testing.Common
{
    /// <inheritdoc />
    public class AsyncQueryProvider<T> : IAsyncQueryProvider
    {
        private static readonly ILogger Logger = LoggingHelper.CreateLogger<AsyncQueryProvider<T>>();

        public AsyncQueryProvider(IEnumerable<T> enumerable)
        {
            Source = enumerable.AsQueryable();
        }

        /// <summary>
        ///     The query provider source.
        /// </summary>
        public IQueryable<T> Source { get; set; }

        /// <inheritdoc />
        /// <remarks>In this implementation it is just a wrapper for <see cref="AsyncQueryProvider{T}.CreateQuery{T}(Expression)" /></remarks>
        public virtual IQueryable CreateQuery(Expression expression)
        {
            Logger.LogDebug("CreateQuery: invoked");

            //Handles cases where we are projecting to another type
            if (expression is MethodCallExpression mce)
            {
                var returnType = mce.Method.ReturnType;
                if (returnType.GetGenericTypeDefinition() != typeof(IQueryable<>))
                {
                    throw new InvalidOperationException($"Expected IQueryable<>; actual {returnType.FullName}");
                }

                var createQueryMethod = typeof(IQueryProvider).GetMethods().Single(x => x.Name.Equals(nameof(IQueryProvider.CreateQuery)) && x.IsGenericMethod);

                var createQueryResult = createQueryMethod.MakeGenericMethod(returnType.GetGenericArguments().Single()).Invoke(this, new[] { expression });

                return (IQueryable) Activator.CreateInstance(typeof(AsyncEnumerable<>).GetGenericTypeDefinition().MakeGenericType(returnType.GetGenericArguments().Single()),
                    createQueryResult);
            }

            return CreateQuery<T>(expression);
        }

        /// <inheritdoc />
        public virtual IQueryable<TElement> CreateQuery<TElement>(Expression expression)
        {
            Logger.LogDebug("CreateQuery<TElement>: invoked");

            if (expression is FromSqlQueryRootExpression)
            {
                Logger.LogDebug("CreateQuery: catch all exception invoked");
                throw new NotSupportedException();
            }

            ProjectExpressionHelper.ThrowIfExpressionIsNotSupported(expression);

            return new AsyncEnumerable<TElement>(Source.Provider.CreateQuery<TElement>(EnsureExpressionCanBeResolvedBySourceProvider(expression)));
        }

        /// <inheritdoc />
        public virtual object Execute(Expression expression)
        {
            Logger.LogDebug("Execute: invoked");
            ProjectExpressionHelper.ThrowIfExpressionIsNotSupported(expression);
            return Source.Provider.Execute(EnsureExpressionCanBeResolvedBySourceProvider(expression));
        }

        /// <inheritdoc />
        public virtual TResult Execute<TResult>(Expression expression)
        {
            Logger.LogDebug("Execute<TResult>: invoked");
            ProjectExpressionHelper.ThrowIfExpressionIsNotSupported(expression);
            return Source.Provider.Execute<TResult>(EnsureExpressionCanBeResolvedBySourceProvider(expression));
        }

        /// <inheritdoc />
        public virtual TResult ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
        {
            //TResult is a Task<T>. The provider requires T.
            return (TResult) typeof(AsyncQueryProvider<T>).GetMethod(nameof(WrapExecuteAsync), BindingFlags.Instance | BindingFlags.NonPublic)
                .MakeGenericMethod(typeof(TResult).GetGenericArguments())
                .Invoke(this, new object[] { expression, cancellationToken });
        }

        private Task<TResult> WrapExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
        {
            return Task.FromResult(Execute<TResult>(expression));
        }

        private Expression EnsureExpressionCanBeResolvedBySourceProvider(Expression expression)
        {
            Logger.LogDebug("EnsureExpressionCanBeResolvedBySourceProvider: invoked");

            if (expression is MethodCallExpression mce && mce.Arguments[0] is Microsoft.EntityFrameworkCore.Query.QueryRootExpression)
            {
                for (var i = 0; i < mce.Arguments.Count; i++)
                {
                    Logger.LogDebug("argument[{i}]: {argument}", i, mce.Arguments[i].ToString());
                }

                //This ensures that Source provider will always be able to resolve the expression
                var arguments = new List<Expression>();
                arguments.Add(Source.Expression);
                arguments.AddRange(mce.Arguments.Skip(1));

                Logger.LogDebug("sourceExpression: {sourceExpression}", Source.Expression.ToString());

                for (var i = 0; i < mce.Arguments.Count; i++)
                {
                    Logger.LogDebug("argument[{i}]: {argument}", i, mce.Arguments[i].ToString());
                }

                return Expression.Call(mce.Method, arguments);
            }

            return expression;
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/EntityFrameworkCore.Testing.Common.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Authors>rgvlee</Authors>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DocumentationFile>EntityFrameworkCore.Testing.Common.xml</DocumentationFile>
    <WarningsAsErrors>NU1605</WarningsAsErrors>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DocumentationFile>EntityFrameworkCore.Testing.Common.xml</DocumentationFile>
    <DebugSymbols>true</DebugSymbols>
    <WarningsAsErrors>NU1605</WarningsAsErrors>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.0" />
    <PackageReference Include="rgvlee.Core" Version="1.2.1" />
  </ItemGroup>

  <ItemGroup>
    <Compile Update="ExceptionMessages.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>ExceptionMessages.resx</DependentUpon>
    </Compile>
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Update="ExceptionMessages.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>ExceptionMessages.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>

</Project>


================================================
FILE: src/EntityFrameworkCore.Testing.Common/EntityFrameworkCore.Testing.Common.xml
================================================
<?xml version="1.0"?>
<doc>
    <assembly>
        <name>EntityFrameworkCore.Testing.Common</name>
    </assembly>
    <members>
        <member name="T:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1">
            <inheritdoc />
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1.Source">
            <summary>
                The query provider source.
            </summary>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1.CreateQuery(System.Linq.Expressions.Expression)">
            <inheritdoc />
            <remarks>In this implementation it is just a wrapper for <see cref="M:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1.CreateQuery``1(System.Linq.Expressions.Expression)" /></remarks>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1.CreateQuery``1(System.Linq.Expressions.Expression)">
            <inheritdoc />
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1.Execute(System.Linq.Expressions.Expression)">
            <inheritdoc />
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1.Execute``1(System.Linq.Expressions.Expression)">
            <inheritdoc />
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.AsyncQueryProvider`1.ExecuteAsync``1(System.Linq.Expressions.Expression,System.Threading.CancellationToken)">
            <inheritdoc />
        </member>
        <member name="T:EntityFrameworkCore.Testing.Common.ExceptionMessages">
            <summary>
              A strongly-typed resource class, for looking up localized strings, etc.
            </summary>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.ExceptionMessages.ResourceManager">
            <summary>
              Returns the cached ResourceManager instance used by this class.
            </summary>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.ExceptionMessages.Culture">
            <summary>
              Overrides the current thread's CurrentUICulture property for all
              resource lookups using this strongly typed resource class.
            </summary>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.ExceptionMessages.CannotCreateDbSetTypeNotIncludedInModel">
            <summary>
              Looks up a localized string similar to Cannot create a DbSet for &apos;{0}&apos; because this type is not included in the model for the context..
            </summary>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.ExceptionMessages.UnableToFindSuitableDbContextConstructor">
            <summary>
              Looks up a localized string similar to Unable to find a suitable constructor. TDbContext must have a parameterless or DbContextOptions/DbContextOptions&lt;TDbContext&gt; constructor..
            </summary>
        </member>
        <member name="T:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextBuilder`1">
            <summary>
                The mocked db context builder.
            </summary>
            <typeparam name="TDbContext">The db context type.</typeparam>
        </member>
        <member name="F:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextBuilder`1.Options">
            <summary>
                The create factory options.
            </summary>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextBuilder`1.MockedDbContext">
            <summary>
                The mocked db context.
            </summary>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextBuilder`1.UseConstructorWithParameters(System.Object[])">
            <summary>
                The parameters that will be used to create the mocked db context and, if one is not provided,
                the in-memory context that the mocked db context will use for in-memory provider supported operations.
            </summary>
            <param name="constructorParameters">
                The constructor parameters.
            </param>
            <returns>The mocked db context builder.</returns>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextBuilder`1.UseDbContext(`0)">
            <summary>
                The db context instance that the mocked db context will use for in-memory provider supported operations.
            </summary>
        </member>
        <member name="T:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextFactory`1">
            <summary>
                The base mocked db context factory.
            </summary>
            <typeparam name="TDbContext">The db context type.</typeparam>
        </member>
        <member name="F:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextFactory`1.Logger">
            <summary>
                The logger instance.
            </summary>
        </member>
        <member name="F:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextFactory`1.ConstructorParameters">
            <summary>
                The parameters that will be used to create the mocked db context and, if one is not provided,
                the in-memory context that the mocked db context will use for in-memory provider supported operations.
            </summary>
        </member>
        <member name="F:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextFactory`1.DbContext">
            <summary>
                The db context instance that the mocked db context will use for in-memory provider supported operations.
            </summary>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextFactory`1.#ctor(EntityFrameworkCore.Testing.Common.Helpers.MockedDbContextFactoryOptions{`0})">
            <summary>
                Constructor.
            </summary>
            <param name="options">The mocked db context factory options.</param>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.BaseMockedDbContextFactory`1.Create">
            <summary>
                Creates and sets up a mocked db context.
            </summary>
            <returns>A mocked db context.</returns>
        </member>
        <member name="T:EntityFrameworkCore.Testing.Common.Helpers.ExpressionHelper">
            <summary>
                A helper for expressions.
            </summary>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.ExpressionHelper.CreatePropertyExpression``2(System.Reflection.PropertyInfo)">
            <summary>
                Creates a property expression for the specified property.
            </summary>
            <typeparam name="TParameter">The expression parameter.</typeparam>
            <typeparam name="TProperty">The expression property.</typeparam>
            <param name="propertyInfo">The property info of the property to create the expression for.</param>
            <returns>A property expression for the specified property.</returns>
        </member>
        <member name="T:EntityFrameworkCore.Testing.Common.Helpers.IMockedDbContextBuilder`1">
            <summary>
                The mocked db context builder.
            </summary>
            <typeparam name="TDbContext">The db context type.</typeparam>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.Helpers.IMockedDbContextBuilder`1.MockedDbContext">
            <summary>
                The mocked db context.
            </summary>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.IMockedDbContextBuilder`1.UseConstructorWithParameters(System.Object[])">
            <summary>
                The parameters that will be used to create the mocked db context and, if one is not provided,
                the in-memory context that the mocked db context will use for in-memory provider supported operations.
            </summary>
            <param name="constructorParameters">
                The constructor parameters.
            </param>
            <returns>The mocked db context builder.</returns>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.IMockedDbContextBuilder`1.UseDbContext(`0)">
            <summary>
                The db context instance that the mocked db context will use for in-memory provider supported operations.
            </summary>
        </member>
        <member name="T:EntityFrameworkCore.Testing.Common.Helpers.MockedDbContextFactoryOptions`1">
            <summary>
                The mocked db context factory options.
            </summary>
            <typeparam name="TDbContext">The db context type.</typeparam>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.Helpers.MockedDbContextFactoryOptions`1.DbContext">
            <summary>
                The db context instance that the mocked db context will use for in-memory provider supported operations.
            </summary>
        </member>
        <member name="P:EntityFrameworkCore.Testing.Common.Helpers.MockedDbContextFactoryOptions`1.ConstructorParameters">
            <summary>
                The parameters that will be used to create the mocked db context and, if one is not provided,
                the in-memory context that the mocked db context will use for in-memory provider supported operations.
            </summary>
        </member>
        <member name="T:EntityFrameworkCore.Testing.Common.Helpers.ParameterMatchingHelper">
            <summary>
                A helper for parameter matching.
            </summary>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.ParameterMatchingHelper.DoInvocationParametersMatchSetUpParameters(System.Collections.Generic.IEnumerable{System.Object},System.Collections.Generic.IEnumerable{System.Object})">
            <summary>
                Determines whether the invocation parameters match the set up parameters.
            </summary>
            <param name="setUpParameters">The set up parameters.</param>
            <param name="invocationParameters">The invocation parameters.</param>
            <returns>true the invocation parameters are a partial or full match of the set up parameters.</returns>
            <remarks>
                If the parameters are DbParameters, parameter name and value are compared.
                Parameter name matching is case insensitive.
                If the value is a string, the matching is case insensitive.
                For everything else an exact match is required.
            </remarks>
        </member>
        <member name="M:EntityFrameworkCore.Testing.Common.Helpers.ParameterMatchingHelper.StringifyParameters(System.Collections.Generic.IEnumerable{System.Object})">
            <summary>
                Converts a sequence of invocation parameters to a string of parameter names and values.
            </summary>
            <param name="invocationParameters">The invocation parameters.</param>
            <returns>A string of parameter names and values.</returns>
        </member>
    </members>
</doc>


================================================
FILE: src/EntityFrameworkCore.Testing.Common/ExceptionMessages.Designer.cs
================================================
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace EntityFrameworkCore.Testing.Common {
    using System;
    
    
    /// <summary>
    ///   A strongly-typed resource class, for looking up localized strings, etc.
    /// </summary>
    // This class was auto-generated by the StronglyTypedResourceBuilder
    // class via a tool like ResGen or Visual Studio.
    // To add or remove a member, edit your .ResX file then rerun ResGen
    // with the /str option, or rebuild your VS project.
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    public class ExceptionMessages {
        
        private static global::System.Resources.ResourceManager resourceMan;
        
        private static global::System.Globalization.CultureInfo resourceCulture;
        
        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        internal ExceptionMessages() {
        }
        
        /// <summary>
        ///   Returns the cached ResourceManager instance used by this class.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        public static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EntityFrameworkCore.Testing.Common.ExceptionMessages", typeof(ExceptionMessages).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }
        
        /// <summary>
        ///   Overrides the current thread's CurrentUICulture property for all
        ///   resource lookups using this strongly typed resource class.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        public static global::System.Globalization.CultureInfo Culture {
            get {
                return resourceCulture;
            }
            set {
                resourceCulture = value;
            }
        }
        
        /// <summary>
        ///   Looks up a localized string similar to Cannot create a DbSet for &apos;{0}&apos; because this type is not included in the model for the context..
        /// </summary>
        public static string CannotCreateDbSetTypeNotIncludedInModel {
            get {
                return ResourceManager.GetString("CannotCreateDbSetTypeNotIncludedInModel", resourceCulture);
            }
        }
        
        /// <summary>
        ///   Looks up a localized string similar to Unable to find a suitable constructor. TDbContext must have a parameterless or DbContextOptions/DbContextOptions&lt;TDbContext&gt; constructor..
        /// </summary>
        public static string UnableToFindSuitableDbContextConstructor {
            get {
                return ResourceManager.GetString("UnableToFindSuitableDbContextConstructor", resourceCulture);
            }
        }
    }
}


================================================
FILE: src/EntityFrameworkCore.Testing.Common/ExceptionMessages.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="CannotCreateDbSetTypeNotIncludedInModel" xml:space="preserve">
    <value>Cannot create a DbSet for '{0}' because this type is not included in the model for the context.</value>
  </data>
  <data name="UnableToFindSuitableDbContextConstructor" xml:space="preserve">
    <value>Unable to find a suitable constructor. TDbContext must have a parameterless or DbContextOptions/DbContextOptions&lt;TDbContext&gt; constructor.</value>
  </data>
</root>

================================================
FILE: src/EntityFrameworkCore.Testing.Common/Helpers/BaseMockedDbContextBuilder.cs
================================================
using Microsoft.EntityFrameworkCore;
using rgvlee.Core.Common.Helpers;

namespace EntityFrameworkCore.Testing.Common.Helpers
{
    /// <summary>
    ///     The mocked db context builder.
    /// </summary>
    /// <typeparam name="TDbContext">The db context type.</typeparam>
    public abstract class BaseMockedDbContextBuilder<TDbContext> : IMockedDbContextBuilder<TDbContext> where TDbContext : DbContext
    {
        /// <summary>
        ///     The create factory options.
        /// </summary>
        protected readonly MockedDbContextFactoryOptions<TDbContext> Options = new();

        /// <summary>
        ///     The mocked db context.
        /// </summary>
        public abstract TDbContext MockedDbContext { get; }

        /// <summary>
        ///     The parameters that will be used to create the mocked db context and, if one is not provided,
        ///     the in-memory context that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        /// <param name="constructorParameters">
        ///     The constructor parameters.
        /// </param>
        /// <returns>The mocked db context builder.</returns>
        public IMockedDbContextBuilder<TDbContext> UseConstructorWithParameters(params object[] constructorParameters)
        {
            EnsureArgument.IsNotEmpty(constructorParameters, nameof(constructorParameters));
            Options.ConstructorParameters = constructorParameters;
            return this;
        }

        /// <summary>
        ///     The db context instance that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        public IMockedDbContextBuilder<TDbContext> UseDbContext(TDbContext dbContext)
        {
            EnsureArgument.IsNotNull(dbContext, nameof(dbContext));
            Options.DbContext = dbContext;
            return this;
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/Helpers/BaseMockedDbContextFactory.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using rgvlee.Core.Common.Extensions;
using rgvlee.Core.Common.Helpers;

namespace EntityFrameworkCore.Testing.Common.Helpers
{
    /// <summary>
    ///     The base mocked db context factory.
    /// </summary>
    /// <typeparam name="TDbContext">The db context type.</typeparam>
    public abstract class BaseMockedDbContextFactory<TDbContext> where TDbContext : DbContext
    {
        /// <summary>
        ///     The logger instance.
        /// </summary>
        protected static readonly ILogger Logger = LoggingHelper.CreateLogger<BaseMockedDbContextFactory<TDbContext>>();

        /// <summary>
        ///     The parameters that will be used to create the mocked db context and, if one is not provided,
        ///     the in-memory context that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        protected readonly List<object> ConstructorParameters;

        /// <summary>
        ///     The db context instance that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        protected readonly TDbContext DbContext;

        /// <summary>
        ///     Constructor.
        /// </summary>
        /// <param name="options">The mocked db context factory options.</param>
        protected BaseMockedDbContextFactory(MockedDbContextFactoryOptions<TDbContext> options)
        {
            DbContext = options.DbContext;

            ConstructorParameters = options.ConstructorParameters?.ToList();

            if (ConstructorParameters == null || !ConstructorParameters.Any())
            {
                var dbContextType = typeof(TDbContext);

                if (!dbContextType.HasConstructor(typeof(DbContextOptions)) &&
                    !dbContextType.HasConstructor(typeof(DbContextOptions<TDbContext>)) &&
                    !dbContextType.HasParameterlessConstructor())
                {
                    throw new MissingMethodException(ExceptionMessages.UnableToFindSuitableDbContextConstructor);
                }

                if (DbContext != null && dbContextType.HasParameterlessConstructor())
                {
                    ConstructorParameters = new List<object>();
                }
                else if (!dbContextType.HasConstructor(typeof(DbContextOptions<>)))
                {
                    ConstructorParameters = new List<object> { new DbContextOptionsBuilder<TDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options };
                }
                else if (!dbContextType.HasConstructor(typeof(DbContextOptions)))
                {
                    ConstructorParameters = new List<object> { new DbContextOptionsBuilder().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options };
                }
            }

            if (DbContext == null)
            {
                DbContext = (TDbContext) Activator.CreateInstance(typeof(TDbContext), ConstructorParameters?.ToArray());
            }
        }

        /// <summary>
        ///     Creates and sets up a mocked db context.
        /// </summary>
        /// <returns>A mocked db context.</returns>
        public abstract TDbContext Create();
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/Helpers/ExpressionHelper.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Query.Internal;
using Microsoft.Extensions.Logging;
using rgvlee.Core.Common.Helpers;

namespace EntityFrameworkCore.Testing.Common.Helpers
{
    /// <summary>
    ///     A helper for expressions.
    /// </summary>
    public static class ExpressionHelper
    {
        private static readonly ILogger Logger = LoggingHelper.CreateLogger(typeof(ExpressionHelper));

        /// <summary>
        ///     Creates a property expression for the specified property.
        /// </summary>
        /// <typeparam name="TParameter">The expression parameter.</typeparam>
        /// <typeparam name="TProperty">The expression property.</typeparam>
        /// <param name="propertyInfo">The property info of the property to create the expression for.</param>
        /// <returns>A property expression for the specified property.</returns>
        public static Expression<Func<TParameter, TProperty>> CreatePropertyExpression<TParameter, TProperty>(PropertyInfo propertyInfo)
        {
            EnsureArgument.IsNotNull(propertyInfo, nameof(propertyInfo));

            var parameter = Expression.Parameter(typeof(TParameter));
            return Expression.Lambda<Func<TParameter, TProperty>>(Expression.Property(parameter, propertyInfo), parameter);
        }

        public static bool SqlAndParametersMatchFromSqlExpression(string sql, IEnumerable<object> parameters, FromSqlQueryRootExpression expression)
        {
            EnsureArgument.IsNotNull(expression, nameof(expression));
            EnsureArgument.IsNotNull(parameters, nameof(parameters));

            var result = SqlMatchesFromSqlExpression(sql, expression) &&
                         ParameterMatchingHelper.DoInvocationParametersMatchSetUpParameters(parameters, (object[]) ((ConstantExpression) expression.Argument).Value);

            Logger.LogDebug("Match? {result}", result);

            return result;
        }

        private static bool SqlMatchesFromSqlExpression(string sql, FromSqlQueryRootExpression expression)
        {
            EnsureArgument.IsNotNull(expression, nameof(expression));

            var expressionSql = expression.Sql;
            var parts = new List<string>();
            parts.Add($"Invocation sql: '{expressionSql}'");
            parts.Add($"Set up sql: '{sql}'");
            Logger.LogDebug(string.Join(Environment.NewLine, parts));

            var result = expressionSql.Contains(sql, StringComparison.OrdinalIgnoreCase);

            Logger.LogDebug("Match? {result}", result);

            return result;
        }

        public static string StringifyFromSqlExpression(FromSqlQueryRootExpression expression)
        {
            EnsureArgument.IsNotNull(expression, nameof(expression));

            var expressionSql = expression.Sql;
            var expressionParameters = (object[]) ((ConstantExpression) expression.Argument).Value;
            var parts = new List<string>();
            parts.Add($"Invocation sql: '{expressionSql}'");
            parts.Add("Invocation Parameters:");
            parts.Add(ParameterMatchingHelper.StringifyParameters(expressionParameters));
            return string.Join(Environment.NewLine, parts);
        }

        public static void ThrowIfExpressionIsNotSupported(Expression expression)
        {
            if (expression is MethodCallExpression mce)
            {
                Logger.LogDebug("{methodName} invoked; expression: '{expression}'", mce.Method.Name, mce);

                if (mce.Method.Name.Equals(nameof(Queryable.ElementAt)))
                {
                    throw new InvalidOperationException();
                }

                if (mce.Method.Name.Equals(nameof(Queryable.ElementAtOrDefault)))
                {
                    throw new InvalidOperationException();
                }

                if (mce.Method.Name.Equals(nameof(Queryable.Select)))
                {
                    var unaryExpression = (UnaryExpression) mce.Arguments[1];
                    var predicateExpression = unaryExpression.Operand;
                    if (predicateExpression.Type.GetGenericArguments().ToList().Count.Equals(3))
                    {
                        throw new InvalidOperationException();
                    }
                }

                if (mce.Method.Name.Equals(nameof(Queryable.SkipWhile)))
                {
                    throw new InvalidOperationException();
                }

                if (mce.Method.Name.Equals(nameof(Queryable.TakeWhile)))
                {
                    throw new InvalidOperationException();
                }
            }
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/Helpers/IMockedDbContextBuilder.cs
================================================
using Microsoft.EntityFrameworkCore;

namespace EntityFrameworkCore.Testing.Common.Helpers
{
    /// <summary>
    ///     The mocked db context builder.
    /// </summary>
    /// <typeparam name="TDbContext">The db context type.</typeparam>
    public interface IMockedDbContextBuilder<TDbContext> where TDbContext : DbContext
    {
        /// <summary>
        ///     The mocked db context.
        /// </summary>
        TDbContext MockedDbContext { get; }

        /// <summary>
        ///     The parameters that will be used to create the mocked db context and, if one is not provided,
        ///     the in-memory context that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        /// <param name="constructorParameters">
        ///     The constructor parameters.
        /// </param>
        /// <returns>The mocked db context builder.</returns>
        IMockedDbContextBuilder<TDbContext> UseConstructorWithParameters(params object[] constructorParameters);

        /// <summary>
        ///     The db context instance that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        IMockedDbContextBuilder<TDbContext> UseDbContext(TDbContext dbContext);
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/Helpers/MockedDbContextFactoryOptions.cs
================================================
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

namespace EntityFrameworkCore.Testing.Common.Helpers
{
    /// <summary>
    ///     The mocked db context factory options.
    /// </summary>
    /// <typeparam name="TDbContext">The db context type.</typeparam>
    public class MockedDbContextFactoryOptions<TDbContext> where TDbContext : DbContext
    {
        /// <summary>
        ///     The db context instance that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        public TDbContext DbContext { get; set; }

        /// <summary>
        ///     The parameters that will be used to create the mocked db context and, if one is not provided,
        ///     the in-memory context that the mocked db context will use for in-memory provider supported operations.
        /// </summary>
        public IEnumerable<object> ConstructorParameters { get; set; }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/Helpers/ParameterMatchingHelper.cs
================================================
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using Microsoft.Extensions.Logging;
using rgvlee.Core.Common.Helpers;

namespace EntityFrameworkCore.Testing.Common.Helpers
{
    /// <summary>
    ///     A helper for parameter matching.
    /// </summary>
    public class ParameterMatchingHelper
    {
        private static readonly ILogger Logger = LoggingHelper.CreateLogger(typeof(ParameterMatchingHelper));

        /// <summary>
        ///     Determines whether the invocation parameters match the set up parameters.
        /// </summary>
        /// <param name="setUpParameters">The set up parameters.</param>
        /// <param name="invocationParameters">The invocation parameters.</param>
        /// <returns>true the invocation parameters are a partial or full match of the set up parameters.</returns>
        /// <remarks>
        ///     If the parameters are DbParameters, parameter name and value are compared.
        ///     Parameter name matching is case insensitive.
        ///     If the value is a string, the matching is case insensitive.
        ///     For everything else an exact match is required.
        /// </remarks>
        public static bool DoInvocationParametersMatchSetUpParameters(IEnumerable<object> setUpParameters, IEnumerable<object> invocationParameters)
        {
            var setUpParametersAsList = setUpParameters.ToList();
            var invocationParametersAsList = invocationParameters.ToList();

            var matches = new Dictionary<int, int>();
            for (var i = 0; i < invocationParametersAsList.Count; i++)
            {
                var invocationParameter = invocationParametersAsList[i];
                Logger.LogDebug("Checking invocationParameter '{invocationParameter}'", invocationParameter);
                matches.Add(i, -1);

                //What was the last set up parameter matched?
                var startAt = matches.Any() ? matches.Max(x => x.Value) + 1 : 0;
                Logger.LogDebug("startAt: {startAt}", startAt);

                for (var j = 0; j < setUpParametersAsList.Count; j++)
                {
                    var setUpParameter = setUpParametersAsList[j];
                    Logger.LogDebug("Checking setUpParameter '{setUpParameter}'", setUpParameter);

                    if (invocationParameter is DbParameter dbInvocationParameter &&
                        setUpParameter is DbParameter dbSetUpParameter &&
                        DoesInvocationParameterMatchSetUpParameter(dbSetUpParameter, dbInvocationParameter))
                    {
                        matches[i] = j;
                        break;
                    }

                    if (DoesInvocationParameterValueMatchSetUpParameterValue(setUpParameter, invocationParameter))
                    {
                        matches[i] = j;
                        break;
                    }
                }
            }

            Logger.LogDebug("Match summary '{summary}'", string.Join(Environment.NewLine, matches.Select(x => $"{x.Key}: {x.Value}")));

            return matches.Count(x => x.Value > -1) >= setUpParametersAsList.Count;
        }

        private static bool DoesInvocationParameterValueMatchSetUpParameterValue(object setUpParameter, object invocationParameter)
        {
            if (invocationParameter == setUpParameter)
            {
                return true;
            }

            if (invocationParameter != null && setUpParameter != null && invocationParameter.Equals(setUpParameter))
            {
                return true;
            }

            if (invocationParameter is string stringInvocationParameterValue &&
                setUpParameter is string stringSetUpParameterValue &&
                stringInvocationParameterValue.Equals(stringSetUpParameterValue, StringComparison.OrdinalIgnoreCase))
            {
                return true;
            }

            return false;
        }

        private static bool DoesInvocationParameterMatchSetUpParameter(IDataParameter setUpParameter, IDataParameter invocationParameter)
        {
            var setUpParameterParameterName = setUpParameter.ParameterName ?? string.Empty;
            var invocationParameterParameterName = invocationParameter.ParameterName ?? string.Empty;

            if (!invocationParameterParameterName.Equals(setUpParameterParameterName, StringComparison.OrdinalIgnoreCase))
            {
                return false;
            }

            return DoesInvocationParameterValueMatchSetUpParameterValue(setUpParameter.Value, invocationParameter.Value);
        }

        /// <summary>
        ///     Converts a sequence of invocation parameters to a string of parameter names and values.
        /// </summary>
        /// <param name="invocationParameters">The invocation parameters.</param>
        /// <returns>A string of parameter names and values.</returns>
        public static string StringifyParameters(IEnumerable<object> invocationParameters)
        {
            var invocationParametersAsList = invocationParameters.ToList();
            var parts = new List<string>();
            for (var i = 0; i < invocationParametersAsList.Count; i++)
            {
                var invocationParameter = invocationParametersAsList[i];

                var sb = new StringBuilder();
                switch (invocationParameter)
                {
                    case DbParameter dbInvocationParameter:
                    {
                        sb.Append(dbInvocationParameter.ParameterName);
                        sb.Append(": ");
                        if (dbInvocationParameter.Value == null)
                        {
                            sb.Append("null");
                        }
                        else
                        {
                            sb.Append(dbInvocationParameter.Value);
                        }

                        break;
                    }

                    case null:
                        sb.Append("Parameter ");
                        sb.Append(i);
                        sb.Append(": null");
                        break;

                    default:
                        sb.Append("Parameter ");
                        sb.Append(i);
                        sb.Append(": ");
                        sb.Append(invocationParameter);
                        break;
                }

                parts.Add(sb.ToString());
            }

            return string.Join(Environment.NewLine, parts);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common/QueryRootExpression.cs
================================================
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Query;

namespace EntityFrameworkCore.Testing.Common
{
    public class FakeQueryRootExpression : EntityQueryRootExpression
    {
        public FakeQueryRootExpression(IAsyncQueryProvider asyncQueryProvider, IEntityType entityType) : base(asyncQueryProvider, entityType)
        {
            Type = typeof(IOrderedQueryable<>).MakeGenericType(entityType.ClrType);
        }

        public override Type Type { get; }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/AsyncEnumerableTests.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using AutoFixture;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public class AsyncEnumerableTests : BaseForQueryableTests<TestEntity>
    {
        private IQueryable<TestEntity> _source;

        protected override IQueryable<TestEntity> Queryable => _source;

        [SetUp]
        public override void SetUp()
        {
            base.SetUp();

            _source = new AsyncEnumerable<TestEntity>(new List<TestEntity>());
        }

        protected override void SeedQueryableSource()
        {
            var itemsToAdd = Fixture.Build<TestEntity>().With(p => p.CreatedAt, DateTime.Today).With(p => p.LastModifiedAt, DateTime.Today).CreateMany().ToList();
            _source = new AsyncEnumerable<TestEntity>(itemsToAdd);
            ItemsAddedToQueryableSource = itemsToAdd;
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForDbContextTests.cs
================================================
using System;
using System.Collections.Generic;
using Microsoft.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using AutoFixture;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class BaseForDbContextTests<TDbContext> : BaseForTests where TDbContext : DbContext
    {
        protected TDbContext MockedDbContext;

        public abstract void AddExecuteSqlInterpolatedResult(TDbContext mockedDbContext, int expectedResult);

        public abstract void AddExecuteSqlInterpolatedResult(TDbContext mockedDbContext, FormattableString sql, int expectedResult);

        public abstract void AddExecuteSqlInterpolatedResult(TDbContext mockedDbContext, string sql, IEnumerable<object> parameters, int expectedResult);

        public abstract void AddExecuteSqlRawResult(TDbContext mockedDbContext, int expectedResult);

        public abstract void AddExecuteSqlRawResult(TDbContext mockedDbContext, string sql, int expectedResult);

        public abstract void AddExecuteSqlRawResult(TDbContext mockedDbContext, string sql, IEnumerable<object> parameters, int expectedResult);

        [Test]
        public void ExecuteSqlInterpolated_AnySql_ReturnsExpectedResult()
        {
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlInterpolated($"sp_NoParams");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlInterpolated($"sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlInterpolated_SpecifiedFormattableStringWithSqlParameterParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<SqlParameter> { new("@SomeParameter2", "Value2") };
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlInterpolated_SpecifiedFormattableStringWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException()
        {
            var sql = "sp_WithParams";
            var setUpParameters = new List<SqlParameter> { new("@SomeParameter3", "Value3") };
            var invocationParameters = new List<SqlParameter> { new("@SomeParameter1", "Value1"), new("@SomeParameter2", "Value2") };
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, setUpParameters, expectedResult);

            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult1 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {invocationParameters[0]}, {invocationParameters[1]}");
            });

            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult2 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {invocationParameters[0]}, {invocationParameters[1]}");
            });
        }

        [Test]
        public void ExecuteSqlInterpolated_SpecifiedSql_ReturnsExpectedResult()
        {
            var sql = (FormattableString) $"sp_NoParams";
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlInterpolated($"sp_NoParams");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlInterpolated($"sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlInterpolated_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException()
        {
            var sql = (FormattableString) $"asdf";
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, expectedResult);

            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult = MockedDbContext.Database.ExecuteSqlInterpolated($"sp_NoParams");
            });
        }

        [Test]
        public void ExecuteSqlInterpolated_WithNoMatchesAdded_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult = MockedDbContext.Database.ExecuteSqlInterpolated($"sp_NoParams");
            });
        }

        [Test]
        public async Task ExecuteSqlInterpolatedAsync_AnySql_ReturnsExpectedResult()
        {
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"sp_NoParams");
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public async Task ExecuteSqlInterpolatedAsync_SpecifiedFormattableStringWithSqlParameterParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<SqlParameter> { new("@SomeParameter2", "Value2") };
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public async Task ExecuteSqlInterpolatedAsync_SpecifiedFormattableStringWithStringParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<string> { "Value2" };
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public async Task ExecuteSqlInterpolatedAsync_SpecifiedSql_ReturnsExpectedResult()
        {
            var sql = (FormattableString) $"sp_NoParams";
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"sp_NoParams");
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlInterpolatedAsync_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException()
        {
            var sql = (FormattableString) $"asdf";
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, expectedResult);

            Assert.ThrowsAsync<InvalidOperationException>(async () =>
            {
                var actualResult = await MockedDbContext.Database.ExecuteSqlInterpolatedAsync($"sp_NoParams");
            });
        }

        [Test]
        public void ExecuteSqlInterpolatedUsingFormattableStringSetUp_SpecifiedFormattableStringWithStringParameters_ReturnsExpectedResult()
        {
            var parameters = new List<string> { "Value2" };
            var sql = (FormattableString) $"[sp_WithParams] {parameters[0]}";
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlInterpolatedUsingFormattableStringSetUp_SpecifiedFormattableStringWithStringParametersThatDoesNotMatchSetUp_ThrowsException()
        {
            var parameters = new List<string> { "Value2" };
            var sql = (FormattableString) $"[sp_WithParams] {parameters[0]}";
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {Fixture.Create<string>()} {parameters[0]}");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {Fixture.Create<string>()} {parameters[0]}");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlInterpolatedUsingSqlAndParameterSetUp_SpecifiedFormattableStringWithStringParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<string> { "Value2" };
            var expectedResult = 1;
            AddExecuteSqlInterpolatedResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]} {Fixture.Create<string>()}");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlRaw_AnySql_ReturnsExpectedResult()
        {
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlRaw("sp_NoParams");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlRaw("sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlRaw_SpecifiedSql_ReturnsExpectedResult()
        {
            var sql = "sp_NoParams";
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlRaw("sp_NoParams");
            var actualResult2 = MockedDbContext.Database.ExecuteSqlRaw("sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlRaw_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException()
        {
            var sql = "asdf";
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, expectedResult);

            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult = MockedDbContext.Database.ExecuteSqlRaw("sp_NoParams");
            });
        }

        [Test]
        public void ExecuteSqlRaw_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<SqlParameter> { new("@SomeParameter2", "Value2") };
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", parameters);
            var actualResult2 = MockedDbContext.Database.ExecuteSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", parameters);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlRaw_SpecifiedSqlWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException()
        {
            var sql = "sp_WithParams";
            var setUpParameters = new List<SqlParameter> { new("@SomeParameter3", "Value3") };
            var invocationParameters = new List<SqlParameter> { new("@SomeParameter1", "Value1"), new("@SomeParameter2", "Value2") };
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, setUpParameters, expectedResult);

            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult1 = MockedDbContext.Database.ExecuteSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", invocationParameters);
            });

            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult2 = MockedDbContext.Database.ExecuteSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", invocationParameters);
            });
        }

        [Test]
        public void ExecuteSqlRaw_SpecifiedSqlWithStringParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<string> { "Value2" };
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = MockedDbContext.Database.ExecuteSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", parameters);
            var actualResult2 = MockedDbContext.Database.ExecuteSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", parameters);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlRaw_WithNoMatchesAdded_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult = MockedDbContext.Database.ExecuteSqlRaw("sp_NoParams");
            });
        }

        [Test]
        public async Task ExecuteSqlRawAsync_AnySql_ReturnsExpectedResult()
        {
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlRawAsync("sp_NoParams");
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlRawAsync("sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public async Task ExecuteSqlRawAsync_SpecifiedSql_ReturnsExpectedResult()
        {
            var sql = "sp_NoParams";
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlRawAsync("sp_NoParams");
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlRawAsync("sp_NoParams");

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void ExecuteSqlRawAsync_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException()
        {
            var sql = "asdf";
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, expectedResult);

            Assert.ThrowsAsync<InvalidOperationException>(async () =>
            {
                var actualResult = await MockedDbContext.Database.ExecuteSqlRawAsync("sp_NoParams");
            });
        }

        [Test]
        public async Task ExecuteSqlRawAsync_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<SqlParameter> { new("@SomeParameter2", "Value2") };
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlRawAsync("[dbo].[sp_WithParams] @SomeParameter2", parameters);
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlRawAsync("[dbo].[sp_WithParams] @SomeParameter2", parameters);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public async Task ExecuteSqlRawAsync_SpecifiedSqlWithStringParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<string> { "Value2" };
            var expectedResult = 1;
            AddExecuteSqlRawResult(MockedDbContext, sql, parameters, expectedResult);

            var actualResult1 = await MockedDbContext.Database.ExecuteSqlRawAsync("[dbo].[sp_WithParams] @SomeParameter2", parameters);
            var actualResult2 = await MockedDbContext.Database.ExecuteSqlRawAsync("[dbo].[sp_WithParams] @SomeParameter2", parameters);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult));
                Assert.That(actualResult2, Is.EqualTo(actualResult1));
            });
        }

        [Test]
        public void Set_TypeNotIncludedInModel_ThrowsException()
        {
            Assert.Multiple(() =>
            {
                var ex = Assert.Throws<InvalidOperationException>(() => MockedDbContext.Set<NotRegisteredEntity>().ToList());
                Assert.That(ex.Message, Is.EqualTo(string.Format(ExceptionMessages.CannotCreateDbSetTypeNotIncludedInModel, nameof(NotRegisteredEntity))));
            });
        }

        [Test]
        public virtual void SetCommandTimeout_ValidTimeout_DoesNotThrowException()
        {
            Assert.DoesNotThrow(() =>
            {
                MockedDbContext.Database.SetCommandTimeout(60);
            });
        }

        [Test]
        public virtual void GetCommandTimeout_ReturnsZero()
        {
            var actualResult = MockedDbContext.Database.GetCommandTimeout();

            actualResult.Should().Be(0);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForDbSetTests.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoFixture;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class BaseForDbSetTests<TDbContext, TEntity> : BaseForMockedQueryableTests<TEntity> where TDbContext : DbContext
        where TEntity : BaseTestEntity
    {
        protected TDbContext MockedDbContext;

        [SetUp]
        public override void SetUp()
        {
            base.SetUp();

            MockedDbContext = CreateMockedDbContext();
        }

        [TearDown]
        public override void TearDown()
        {
            MockedDbContext.Dispose();
            
            base.TearDown();
        }

        protected override void SeedQueryableSource()
        {
            var itemsToAdd = Fixture.Build<TEntity>().With(p => p.CreatedAt, DateTime.Today).With(p => p.LastModifiedAt, DateTime.Today).CreateMany().ToList();
            DbSet.AddRange(itemsToAdd);
            MockedDbContext.SaveChanges();
            ItemsAddedToQueryableSource = itemsToAdd;
        }

        protected abstract TDbContext CreateMockedDbContext();

        [Test]
        public virtual void AddAndPersist_Item_AddsAndPersistsItem()
        {
            var expectedResult = Fixture.Create<TEntity>();

            DbSet.Add(expectedResult);
            MockedDbContext.SaveChanges();

            Assert.Multiple(() =>
            {
                Assert.That(DbSet.Single(), Is.EqualTo(expectedResult));
                Assert.That(DbSet.Single(), Is.EqualTo(expectedResult));
            });
        }

        [Test]
        public virtual void AddAndPersist_Items_AddsAndPersistsItems()
        {
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();

            DbSet.AddRange(expectedResult);
            MockedDbContext.SaveChanges();

            var actualResult = DbSet.ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult, Is.EquivalentTo(expectedResult));
                Assert.That(DbSet.ToList(), Is.EquivalentTo(actualResult));
            });
        }

        [Test]
        public virtual async Task AddAndPersistAsync_Item_AddsAndPersistsItem()
        {
            var expectedResult = Fixture.Create<TEntity>();

            await DbSet.AddAsync(expectedResult);
            await MockedDbContext.SaveChangesAsync();

            Assert.Multiple(() =>
            {
                Assert.That(DbSet.Single(), Is.EqualTo(expectedResult));
                Assert.That(DbSet.Single(), Is.EqualTo(expectedResult));
            });
        }

        [Test]
        public virtual async Task AddAndPersistAsync_Items_AddsAndPersistsItems()
        {
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();

            await DbSet.AddRangeAsync(expectedResult);
            await MockedDbContext.SaveChangesAsync();

            var actualResult = DbSet.ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult, Is.EquivalentTo(expectedResult));
                Assert.That(DbSet.ToList(), Is.EquivalentTo(actualResult));
            });
        }

        [Test]
        public virtual void AddThenSingleThenAddRangeThenToListThenWhereThenSelect_ReturnsExpectedResults()
        {
            var items = Fixture.CreateMany<TEntity>().ToList();
            DbSet.Add(items[0]);
            MockedDbContext.SaveChanges();

            var singleResult = DbSet.Single();

            DbSet.AddRange(items.Skip(1));
            MockedDbContext.SaveChanges();

            var toListResult = DbSet.ToList();

            var selectedItem = items.Last();
            var whereResult = DbSet.Where(x => x.Equals(selectedItem)).ToList();

            var selectResult = DbSet.Select(x => new { Item = x }).ToList();

            Assert.Multiple(() =>
            {
                Assert.That(singleResult, Is.EqualTo(items[0]));
                Assert.That(toListResult, Is.EquivalentTo(items));
                Assert.That(whereResult, Is.EquivalentTo(new List<TEntity> { selectedItem }));
                for (var i = 0; i < items.Count; i++)
                {
                    Assert.That(selectResult[i].Item, Is.EqualTo(items[i]));
                }
            });
        }

        [Test]
        public virtual void AnyThenAddThenPersistThenAny_ReturnsFalseThenTrue()
        {
            var actualResult1 = DbSet.Any();
            DbSet.Add(Fixture.Create<TEntity>());
            MockedDbContext.SaveChanges();
            var actualResult2 = DbSet.Any();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.False);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual async Task AsAsyncEnumerable_ReturnsAsyncEnumerable()
        {
            var expectedResult = Fixture.Create<TEntity>();
            DbSet.Add(expectedResult);
            MockedDbContext.SaveChanges();

            var asyncEnumerable = DbSet.AsAsyncEnumerable();

            var actualResults = new List<TEntity>();
            await foreach (var item in asyncEnumerable)
            {
                actualResults.Add(item);
            }

            Assert.Multiple(() =>
            {
                Assert.That(actualResults.Single(), Is.EqualTo(expectedResult));
                Assert.That(actualResults.Single(), Is.EqualTo(expectedResult));
            });
        }

        [Test]
        public virtual void AsQueryable_ReturnsQueryable()
        {
            var expectedResult = Fixture.Create<TEntity>();
            DbSet.Add(expectedResult);
            MockedDbContext.SaveChanges();

            var queryable = DbSet.AsQueryable();

            Assert.Multiple(() =>
            {
                Assert.That(queryable.Single(), Is.EqualTo(expectedResult));
                Assert.That(queryable.Single(), Is.EqualTo(expectedResult));
            });
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForMockedQueryableTests.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Microsoft.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using AutoFixture;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class BaseForMockedQueryableTests<TEntity> : BaseForQueryableTests<TEntity> where TEntity : BaseTestEntity
    {
        protected DbSet<TEntity> DbSet => (DbSet<TEntity>) Queryable;

        protected abstract void AddFromSqlRawResult(DbSet<TEntity> mockedDbSet, IEnumerable<TEntity> expectedResult);

        protected abstract void AddFromSqlRawResult(DbSet<TEntity> mockedDbSet, string sql, IEnumerable<TEntity> expectedResult);

        protected abstract void AddFromSqlRawResult(DbSet<TEntity> mockedDbSet, string sql, IEnumerable<object> parameters, IEnumerable<TEntity> expectedResult);

        protected abstract void AddFromSqlInterpolatedResult(DbSet<TEntity> mockedDbSet, IEnumerable<TEntity> expectedResult);

        protected abstract void AddFromSqlInterpolatedResult(DbSet<TEntity> mockedDbSet, FormattableString sql, IEnumerable<TEntity> expectedResult);

        protected abstract void AddFromSqlInterpolatedResult(DbSet<TEntity> mockedDbSet, string sql, IEnumerable<object> parameters, IEnumerable<TEntity> expectedResult);

        [Test]
        public virtual void FormattableStringSetUpFromSqlInterpolated_SpecifiedSqlWithStringParameters_ReturnsExpectedResult()
        {
            var parameters = new List<string> { "Value2" };
            var sql = (FormattableString) $"[sp_WithParams] {parameters[0]}";

            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlInterpolatedResult(DbSet, sql, expectedResult);

            var actualResult1 = DbSet.FromSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]}").ToList();
            var actualResult2 = DbSet.FromSqlInterpolated($"[dbo].[sp_WithParams] {parameters[0]}").ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlInterpolated_AnySql_ReturnsExpectedResult()
        {
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlInterpolatedResult(DbSet, expectedResult);

            var actualResult1 = DbSet.FromSqlInterpolated($"sp_NoParams").ToList();
            var actualResult2 = DbSet.FromSqlInterpolated($"sp_NoParams").ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlInterpolated_SpecifiedSql_ReturnsExpectedResult()
        {
            var sql = (FormattableString) $"sp_NoParams";
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlInterpolatedResult(DbSet, sql, expectedResult);

            var actualResult1 = DbSet.FromSqlInterpolated($"[dbo].[sp_NoParams]").ToList();
            var actualResult2 = DbSet.FromSqlInterpolated($"sp_NoParams").ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlInterpolated_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException()
        {
            var sql = (FormattableString) $"asdf";
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlInterpolatedResult(DbSet, sql, expectedResult);

            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult = DbSet.FromSqlInterpolated($"sp_NoParams").ToList();
            });
        }

        [Test]
        public virtual void FromSqlInterpolated_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<SqlParameter> { new("@SomeParameter2", "Value2") };
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlInterpolatedResult(DbSet, sql, parameters, expectedResult);

            var actualResult1 = DbSet.FromSqlInterpolated($"[dbo].[sp_WithParams] {Fixture.Create<string>()}, {parameters[0]}").ToList();
            var actualResult2 = DbSet.FromSqlInterpolated($"sp_WithParams {Fixture.Create<string>()}, {parameters[0]}").ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlInterpolated_SpecifiedSqlWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException()
        {
            var sql = "sp_WithParams";
            var setUpParameters = new List<SqlParameter> { new("@SomeParameter3", "Value3") };
            var invocationParameters = new List<SqlParameter> { new("@SomeParameter1", "Value1"), new("@SomeParameter2", "Value2") };
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlInterpolatedResult(DbSet, sql, setUpParameters, expectedResult);

            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult1 = DbSet.FromSqlInterpolated($"[dbo].[sp_WithParams] {invocationParameters[0]}, {invocationParameters[1]}").ToList();
            });

            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult2 = DbSet.FromSqlInterpolated($"sp_WithParams {invocationParameters[0]}, {invocationParameters[1]}").ToList();
            });
        }

        [Test]
        public virtual void FromSqlInterpolated_SpecifiedSqlWithStringParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<string> { "Value2" };
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlInterpolatedResult(DbSet, sql, parameters, expectedResult);

            var actualResult1 = DbSet.FromSqlInterpolated($"[dbo].[sp_WithParams] {Fixture.Create<string>()}, {parameters[0]}").ToList();
            var actualResult2 = DbSet.FromSqlInterpolated($"sp_WithParams {Fixture.Create<string>()}, {parameters[0]}").ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlInterpolated_ThrowsException()
        {
            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult = DbSet.FromSqlInterpolated($"sp_NoParams").ToList();
            });
        }

        [Test]
        public virtual void FromSqlRaw_AnySql_ReturnsExpectedResult()
        {
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlRawResult(DbSet, expectedResult);

            var actualResult1 = DbSet.FromSqlRaw("sp_NoParams").ToList();
            var actualResult2 = DbSet.FromSqlRaw("sp_NoParams").ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlRaw_QueryProviderWithManyFromSqlResults_ReturnsExpectedResults()
        {
            var sql1 = "sp_NoParams";
            var expectedResult1 = Fixture.CreateMany<TEntity>().ToList();

            var sql2 = "sp_WithParams";
            var parameters2 = new List<SqlParameter> { new("@SomeParameter1", "Value1"), new("@SomeParameter2", "Value2") };
            var expectedResult2 = Fixture.CreateMany<TEntity>().ToList();

            AddFromSqlRawResult(DbSet, sql1, expectedResult1);
            AddFromSqlRawResult(DbSet, sql2, parameters2, expectedResult2);

            Console.WriteLine("actualResult1");
            var actualResult1 = DbSet.FromSqlRaw("[dbo].[sp_NoParams]").ToList();

            Console.WriteLine("actualResult2");
            var actualResult2 = DbSet.FromSqlRaw("[dbo].[sp_WithParams]", parameters2.ToArray()).ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult1));
                Assert.That(actualResult2, Is.EquivalentTo(expectedResult2));
            });
        }

        [Test]
        public virtual void FromSqlRaw_SpecifiedSql_ReturnsExpectedResult()
        {
            var sql = "sp_NoParams";
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlRawResult(DbSet, sql, expectedResult);

            var actualResult1 = DbSet.FromSqlRaw("[dbo].[sp_NoParams]").ToList();
            var actualResult2 = DbSet.FromSqlRaw("sp_NoParams").ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlRaw_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException()
        {
            var sql = "asdf";
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlRawResult(DbSet, sql, expectedResult);

            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult = DbSet.FromSqlRaw("sp_NoParams").ToList();
            });
        }

        [Test]
        public virtual void FromSqlRaw_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<SqlParameter> { new("@SomeParameter2", "Value2") };
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlRawResult(DbSet, sql, parameters, expectedResult);

            var actualResult1 = DbSet.FromSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", parameters.ToArray()).ToList();
            var actualResult2 = DbSet.FromSqlRaw("sp_WithParams @SomeParameter1 @SomeParameter2", parameters.ToArray()).ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlRaw_SpecifiedSqlWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException()
        {
            var sql = "sp_WithParams";
            var setUpParameters = new List<SqlParameter> { new("@SomeParameter3", "Value3") };
            var invocationParameters = new List<SqlParameter> { new("@SomeParameter1", "Value1"), new("@SomeParameter2", "Value2") };
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlRawResult(DbSet, sql, setUpParameters, expectedResult);

            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult1 = DbSet.FromSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", invocationParameters.ToArray()).ToList();
            });

            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult2 = DbSet.FromSqlRaw("sp_WithParams @SomeParameter1 @SomeParameter2", invocationParameters.ToArray()).ToList();
            });
        }

        [Test]
        public virtual void FromSqlRaw_SpecifiedSqlWithStringParameters_ReturnsExpectedResult()
        {
            var sql = "sp_WithParams";
            var parameters = new List<string> { "Value2" };
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlRawResult(DbSet, sql, parameters, expectedResult);

            var actualResult1 = DbSet.FromSqlRaw("[dbo].[sp_WithParams] @SomeParameter1 @SomeParameter2", parameters.ToArray()).ToList();
            var actualResult2 = DbSet.FromSqlRaw("sp_WithParams @SomeParameter1 @SomeParameter2", parameters.ToArray()).ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(actualResult1));
            });
        }

        [Test]
        public virtual void FromSqlRaw_ThrowsException()
        {
            Assert.Throws<NotSupportedException>(() =>
            {
                var actualResult = DbSet.FromSqlRaw("sp_NoParams").ToList();
            });
        }

        [Test]
        public virtual async Task FromSqlRawThenFirstOrDefaultAsync_ReturnsFirstElement()
        {
            var sql = "sp_NoParams";
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddFromSqlRawResult(DbSet, sql, expectedResult);

            var actualResult1 = await DbSet.FromSqlRaw("[dbo].[sp_NoParams]").FirstOrDefaultAsync();
            var actualResult2 = await DbSet.FromSqlRaw("[dbo].[sp_NoParams]").FirstOrDefaultAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(expectedResult.First()));
                Assert.That(actualResult2, Is.EqualTo(expectedResult.First()));
            });
        }

        [Test]
        public void ContainsListCollection_ReturnsFalse()
        {
            var containsListCollection = ((IListSource) Queryable).ContainsListCollection;
            Assert.That(containsListCollection, Is.False);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForQueryableTests.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using AutoFixture;
using AutoMapper;
using KellermanSoftware.CompareNetObjects;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class BaseForQueryableTests<T> : BaseForTests where T : BaseTestEntity
    {
        protected List<T> ItemsAddedToQueryableSource;

        protected abstract IQueryable<T> Queryable { get; }

        protected abstract void SeedQueryableSource();

        [Test]
        public virtual void All_FalseCondition_ReturnsFalse()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.All(x => string.IsNullOrWhiteSpace(x.FullName));
            var actualResult2 = Queryable.All(x => string.IsNullOrWhiteSpace(x.FullName));

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.False);
                Assert.That(actualResult2, Is.False);
            });
        }

        [Test]
        public virtual void All_TrueCondition_ReturnsTrue()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.All(x => !string.IsNullOrWhiteSpace(x.FullName));
            var actualResult2 = Queryable.All(x => !string.IsNullOrWhiteSpace(x.FullName));

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.True);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual async Task AllAsync_FalseCondition_ReturnsFalse()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.AllAsync(x => string.IsNullOrWhiteSpace(x.FullName));
            var actualResult2 = await Queryable.AllAsync(x => string.IsNullOrWhiteSpace(x.FullName));

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.False);
                Assert.That(actualResult2, Is.False);
            });
        }

        [Test]
        public virtual async Task AllAsync_TrueCondition_ReturnsTrue()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.AllAsync(x => !string.IsNullOrWhiteSpace(x.FullName));
            var actualResult2 = await Queryable.AllAsync(x => !string.IsNullOrWhiteSpace(x.FullName));

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.True);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual void Any_ReturnsTrue()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Any();
            var actualResult2 = Queryable.Any();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.True);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual void Any_WithNoItemsAdded_ReturnsFalse()
        {
            var actualResult1 = Queryable.Any();
            var actualResult2 = Queryable.Any();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.False);
                Assert.That(actualResult2, Is.False);
            });
        }

        [Test]
        public virtual async Task AnyAsync_ReturnsTrue()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.AnyAsync();
            var actualResult2 = await Queryable.AnyAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.True);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual async Task AnyAsyncWithCancellationToken_ReturnsTrue()
        {
            SeedQueryableSource();

            using (var cancellationTokenSource = new CancellationTokenSource(new TimeSpan(0, 1, 0)))
            {
                var actualResult1 = await Queryable.AnyAsync(cancellationTokenSource.Token);
                var actualResult2 = await Queryable.AnyAsync(cancellationTokenSource.Token);

                Assert.Multiple(() =>
                {
                    Assert.That(actualResult1, Is.True);
                    Assert.That(actualResult2, Is.True);
                });
            }
        }

        [Test]
        public virtual void Average_Decimal_ReturnsAverage()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Average(x => x.Weight);
            var actualResult2 = Queryable.Average(x => x.Weight);

            Assert.Multiple(() =>
            {
                var average = 0m;
                for (var i = 0; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    average += ItemsAddedToQueryableSource[i].Weight;
                }

                average = average / ItemsAddedToQueryableSource.Count;

                Assert.That(actualResult1, Is.EqualTo(average));
                Assert.That(actualResult2, Is.EqualTo(average));
            });
        }

        [Test]
        public virtual async Task AverageAsync_Decimal_ReturnsAverage()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.AverageAsync(x => x.Weight);
            var actualResult2 = await Queryable.AverageAsync(x => x.Weight);

            Assert.Multiple(() =>
            {
                var average = 0m;
                for (var i = 0; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    average += ItemsAddedToQueryableSource[i].Weight;
                }

                average = average / ItemsAddedToQueryableSource.Count;

                Assert.That(actualResult1, Is.EqualTo(average));
                Assert.That(actualResult2, Is.EqualTo(average));
            });
        }

        [Test]
        public virtual void Contains_FalseCondition_ReturnsFalse()
        {
            SeedQueryableSource();

            var itemToFind = Fixture.Create<T>();

            var actualResult1 = Queryable.Contains(itemToFind);
            var actualResult2 = Queryable.Contains(itemToFind);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.False);
                Assert.That(actualResult2, Is.False);
            });
        }

        [Test]
        public virtual void Contains_TrueCondition_ReturnsTrue()
        {
            SeedQueryableSource();

            var itemToFind = Queryable.First();

            var actualResult1 = Queryable.Contains(itemToFind);
            var actualResult2 = Queryable.Contains(itemToFind);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.True);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual async Task ContainsAsync_FalseCondition_ReturnsFalse()
        {
            SeedQueryableSource();

            var itemToFind = Fixture.Create<T>();

            var actualResult1 = await Queryable.ContainsAsync(itemToFind);
            var actualResult2 = await Queryable.ContainsAsync(itemToFind);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.False);
                Assert.That(actualResult2, Is.False);
            });
        }

        [Test]
        public virtual async Task ContainsAsync_TrueCondition_ReturnsTrue()
        {
            SeedQueryableSource();

            var itemToFind = Queryable.First();

            var actualResult1 = await Queryable.ContainsAsync(itemToFind);
            var actualResult2 = await Queryable.ContainsAsync(itemToFind);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.True);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual void ElementAt_ThrowsException()
        {
            SeedQueryableSource();

            Assert.Multiple(() =>
            {
                var ex1 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var firstElement = Queryable.ElementAt(0);
                });

                //Assert.That(ex1.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, $"DbSet<{typeof(T).Name}>()\r\n    .ElementAt(0)")));

                var ex2 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var lastElement = Queryable.ElementAt(Queryable.ToList().Count - 1);
                });

                //Assert.That(ex2.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, $"DbSet<{typeof(T).Name}>()\r\n    .ElementAt({Queryable.ToList().Count - 1})")));
            });
        }

        [Test]
        public virtual void ElementAt_AfterAsEnumerable_DoesNotThrowException()
        {
            SeedQueryableSource();

            Console.WriteLine("Assert start");

            Assert.Multiple(() =>
            {
                Assert.DoesNotThrow(() =>
                {
                    var firstElement = Queryable.AsEnumerable().ElementAt(0);
                });

                Assert.DoesNotThrow(() =>
                {
                    var lastElement = Queryable.AsEnumerable().ElementAt(Queryable.ToList().Count - 1);
                });
            });
        }

        [Test]
        public virtual void ElementAt_AfterToList_DoesNotThrowException()
        {
            SeedQueryableSource();

            Assert.Multiple(() =>
            {
                Assert.DoesNotThrow(() =>
                {
                    var firstElement = Queryable.ToList().ElementAt(0);
                });

                Assert.DoesNotThrow(() =>
                {
                    var lastElement = Queryable.ToList().ElementAt(Queryable.ToList().Count - 1);
                });
            });
        }

        [Test]
        public virtual void ElementAtOrDefault_ThrowsException()
        {
            SeedQueryableSource();

            Assert.Multiple(() =>
            {
                var ex1 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var firstElement = Queryable.ElementAtOrDefault(0);
                });

                //Assert.That(ex1.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, $"DbSet<{typeof(T).Name}>()\r\n    .ElementAtOrDefault(0)")));

                var ex2 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var lastElement = Queryable.ElementAtOrDefault(Queryable.ToList().Count - 1);
                });

                //Assert.That(ex2.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, $"DbSet<{typeof(T).Name}>()\r\n    .ElementAtOrDefault({Queryable.ToList().Count - 1})")));
            });
        }

        [Test]
        public virtual void ElementAtOrDefault_WithNoItemsAdded_ThrowsException()
        {
            Assert.Multiple(() =>
            {
                var ex1 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var firstElement = Queryable.ElementAtOrDefault(0);
                });

                //Assert.That(ex1.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, $"DbSet<{typeof(T).Name}>()\r\n    .ElementAtOrDefault(0)")));

                var ex2 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var lastElement = Queryable.ElementAtOrDefault(Queryable.ToList().Count - 1);
                });

                //Assert.That(ex2.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, $"DbSet<{typeof(T).Name}>()\r\n    .ElementAtOrDefault({Queryable.ToList().Count - 1})")));
            });
        }

        [Test]
        public virtual void First_ReturnsFirstElement()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.First();
            var actualResult2 = Queryable.First();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.First()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.First()));
            });
        }

        [Test]
        public virtual void First_WithNoItemsAdded_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult1 = Queryable.First();
            });
        }

        [Test]
        public virtual async Task FirstAsync_ReturnsFirstElement()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.FirstAsync();
            var actualResult2 = await Queryable.FirstAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.First()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.First()));
            });
        }

        [Test]
        public virtual void FirstOrDefault_ReturnsFirstElement()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.FirstOrDefault();
            var actualResult2 = Queryable.FirstOrDefault();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.First()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.First()));
            });
        }

        [Test]
        public virtual void FirstOrDefault_WithNoItemsAdded_ReturnsFirstElement()
        {
            var actualResult1 = Queryable.FirstOrDefault();
            var actualResult2 = Queryable.FirstOrDefault();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(default(T)));
                Assert.That(actualResult2, Is.EqualTo(default(T)));
            });
        }

        [Test]
        public virtual async Task FirstOrDefaultAsync_ReturnsFirstElement()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.FirstOrDefaultAsync();
            var actualResult2 = await Queryable.FirstOrDefaultAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.First()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.First()));
            });
        }

        [Test]
        public virtual void Last_ReturnsLastElement()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Last();
            var actualResult2 = Queryable.Last();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
            });
        }

        [Test]
        public virtual void Last_WithNoItemsAdded_ThrowsException()
        {
            Assert.Throws<InvalidOperationException>(() =>
            {
                var actualResult1 = Queryable.Last();
            });
        }

        [Test]
        public virtual async Task LastAsync_ReturnsLastElement()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.LastAsync();
            var actualResult2 = await Queryable.LastAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
            });
        }

        [Test]
        public virtual void LastOrDefault_ReturnsLastElement()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.LastOrDefault();
            var actualResult2 = Queryable.LastOrDefault();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
            });
        }

        [Test]
        public virtual void LastOrDefault_WithNoItemsAdded_ReturnsLastElement()
        {
            var actualResult1 = Queryable.LastOrDefault();
            var actualResult2 = Queryable.LastOrDefault();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(default(T)));
                Assert.That(actualResult2, Is.EqualTo(default(T)));
            });
        }

        [Test]
        public virtual async Task LastOrDefaultAsync_ReturnsLastElement()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.LastOrDefaultAsync();
            var actualResult2 = await Queryable.LastOrDefaultAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
                Assert.That(actualResult2, Is.EqualTo(ItemsAddedToQueryableSource.Last()));
            });
        }

        [Test]
        public virtual void Max_DateTime_ReturnsMaxDateTime()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Max(x => x.DateOfBirth);
            var actualResult2 = Queryable.Max(x => x.DateOfBirth);

            Assert.Multiple(() =>
            {
                var maxDateTime = ItemsAddedToQueryableSource[0].DateOfBirth;
                for (var i = 1; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    if (ItemsAddedToQueryableSource[i].DateOfBirth > maxDateTime)
                    {
                        maxDateTime = ItemsAddedToQueryableSource[i].DateOfBirth;
                    }
                }

                Assert.That(actualResult1, Is.EqualTo(maxDateTime));
                Assert.That(actualResult2, Is.EqualTo(maxDateTime));
            });
        }

        [Test]
        public virtual async Task MaxAsync_DateTime_ReturnsMaxDateTime()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.MaxAsync(x => x.DateOfBirth);
            var actualResult2 = await Queryable.MaxAsync(x => x.DateOfBirth);

            Assert.Multiple(() =>
            {
                var maxDateTime = ItemsAddedToQueryableSource[0].DateOfBirth;
                for (var i = 1; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    if (ItemsAddedToQueryableSource[i].DateOfBirth > maxDateTime)
                    {
                        maxDateTime = ItemsAddedToQueryableSource[i].DateOfBirth;
                    }
                }

                Assert.That(actualResult1, Is.EqualTo(maxDateTime));
                Assert.That(actualResult2, Is.EqualTo(maxDateTime));
            });
        }

        [Test]
        public virtual void Min_DateTime_ReturnsMinDateTime()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Min(x => x.DateOfBirth);
            var actualResult2 = Queryable.Min(x => x.DateOfBirth);

            Assert.Multiple(() =>
            {
                var minDateTime = ItemsAddedToQueryableSource[0].DateOfBirth;
                for (var i = 1; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    if (ItemsAddedToQueryableSource[i].DateOfBirth < minDateTime)
                    {
                        minDateTime = ItemsAddedToQueryableSource[i].DateOfBirth;
                    }
                }

                Assert.That(actualResult1, Is.EqualTo(minDateTime));
                Assert.That(actualResult2, Is.EqualTo(minDateTime));
            });
        }

        [Test]
        public virtual async Task MinAsync_DateTime_ReturnsMinDateTime()
        {
            SeedQueryableSource();

            var actualResult1 = await Queryable.MinAsync(x => x.DateOfBirth);
            var actualResult2 = await Queryable.MinAsync(x => x.DateOfBirth);

            Assert.Multiple(() =>
            {
                var minDateTime = ItemsAddedToQueryableSource[0].DateOfBirth;
                for (var i = 1; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    if (ItemsAddedToQueryableSource[i].DateOfBirth < minDateTime)
                    {
                        minDateTime = ItemsAddedToQueryableSource[i].DateOfBirth;
                    }
                }

                Assert.That(actualResult1, Is.EqualTo(minDateTime));
                Assert.That(actualResult2, Is.EqualTo(minDateTime));
            });
        }

        [Test]
        public virtual void OrderBy_DateTime_ReturnsItemsInAscendingOrder()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.OrderBy(x => x.DateOfBirth).ToList();
            var actualResult2 = Queryable.OrderBy(x => x.DateOfBirth).ToList();

            Assert.Multiple(() =>
            {
                for (var i = 1; i < actualResult1.Count; i++)
                {
                    Assert.That(actualResult1[i].DateOfBirth, Is.GreaterThanOrEqualTo(actualResult1[i - 1].DateOfBirth));
                }

                for (var i = 1; i < actualResult2.Count; i++)
                {
                    Assert.That(actualResult2[i].DateOfBirth, Is.GreaterThanOrEqualTo(actualResult2[i - 1].DateOfBirth));
                }
            });
        }

        [Test]
        public virtual void OrderByDescending_DateTime_ReturnsItemsInDescendingOrder()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.OrderByDescending(x => x.DateOfBirth).ToList();
            var actualResult2 = Queryable.OrderByDescending(x => x.DateOfBirth).ToList();

            Assert.Multiple(() =>
            {
                for (var i = 1; i < actualResult1.Count; i++)
                {
                    Assert.That(actualResult1[i].DateOfBirth, Is.LessThanOrEqualTo(actualResult1[i - 1].DateOfBirth));
                }

                for (var i = 1; i < actualResult2.Count; i++)
                {
                    Assert.That(actualResult2[i].DateOfBirth, Is.LessThanOrEqualTo(actualResult2[i - 1].DateOfBirth));
                }
            });
        }

        [Test]
        public virtual void OrderByThenOrderBy_FixedDateTimeAndDecimal_ReturnsItemsInAscendingOrder()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.OrderBy(x => x.CreatedAt).ThenBy(x => x.Weight).ToList();
            var actualResult2 = Queryable.OrderBy(x => x.CreatedAt).ThenBy(x => x.Weight).ToList();

            Assert.Multiple(() =>
            {
                for (var i = 1; i < actualResult1.Count; i++)
                {
                    Assert.That(actualResult1[i].Weight, Is.GreaterThanOrEqualTo(actualResult1[i - 1].Weight));
                }

                for (var i = 1; i < actualResult2.Count; i++)
                {
                    Assert.That(actualResult2[i].Weight, Is.GreaterThanOrEqualTo(actualResult2[i - 1].Weight));
                }
            });
        }

        [Test]
        public virtual void Select_ReturnsSequence()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Select(x => x).ToList();
            var actualResult2 = Queryable.Select(x => x).ToList();

            Assert.Multiple(() =>
            {
                for (var i = 0; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    Assert.That(actualResult1[i], Is.EqualTo(ItemsAddedToQueryableSource[i]));
                    Assert.That(actualResult2[i], Is.EqualTo(ItemsAddedToQueryableSource[i]));
                }
            });
        }

        [Test]
        public virtual async Task SelectAnonymousObjectThenToListAsync_ReturnsList()
        {
            SeedQueryableSource();

            var expectedResult = Queryable.Select(x => new { x.Id }).ToList();

            var actualResult1 = await Queryable.Select(x => new { x.Id }).ToListAsync();
            var actualResult2 = await Queryable.Select(x => new { x.Id }).ToListAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(expectedResult));
            });
        }

        [Test]
        public virtual void SelectWithIndex_ThrowsException()
        {
            SeedQueryableSource();

            Assert.Multiple(() =>
            {
                var ex1 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult1 = Queryable.Select((x, i) => new { Index = i, Item = x }).ToList();
                });

                //Assert.That(ex1.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));

                var ex2 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult2 = Queryable.Select((x, i) => new { Index = i, Item = x }).ToList();
                });

                //Assert.That(ex2.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));
            });
        }

        [Test]
        public virtual void SelectWithIndexThenWhereThenAny_TrueCondition_ThrowsException()
        {
            SeedQueryableSource();

            Assert.Multiple(() =>
            {
                var ex = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult1 = Queryable.Select((x, i) => new { Index = i, Item = x }).Where(x => !x.Index.Equals(0)).Any();
                });

                //Assert.That(ex.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));
            });
        }

        [Test]
        public virtual void Skip_One_ReturnsSequenceThatDoesNotIncludeFirstItem()
        {
            SeedQueryableSource();

            var firstItem = Queryable.First();

            var actualResult1 = Queryable.Skip(1);
            var actualResult2 = Queryable.Skip(1);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1.Contains(firstItem), Is.False);
                Assert.That(actualResult1.Count(), Is.EqualTo(Queryable.Count() - 1));

                Assert.That(actualResult2.Contains(firstItem), Is.False);
                Assert.That(actualResult2.Count(), Is.EqualTo(Queryable.Count() - 1));
            });
        }

        [Test]
        public virtual void SkipWhile_SkipFirstItem_ThrowsException()
        {
            SeedQueryableSource();

            var firstItem = Queryable.First();

            Assert.Multiple(() =>
            {
                var ex1 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult1 = Queryable.SkipWhile(x => x.Equals(firstItem)).ToList();
                });

                //Assert.That(ex1.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));

                var ex2 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult2 = Queryable.SkipWhile(x => x.Equals(firstItem)).ToList();
                });

                //Assert.That(ex2.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));
            });
        }

        [Test]
        public virtual void Take_One_ReturnsFirstItem()
        {
            SeedQueryableSource();

            var firstItem = Queryable.First();

            var actualResult1 = Queryable.Take(1);
            var actualResult2 = Queryable.Take(1);

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1.Count(), Is.EqualTo(1));
                Assert.That(actualResult1.First(), Is.EqualTo(firstItem));

                Assert.That(actualResult2.Count(), Is.EqualTo(1));
                Assert.That(actualResult2.First(), Is.EqualTo(firstItem));
            });
        }

        [Test]
        public virtual void TakeWhile_TakeFirstItem_ThrowsException()
        {
            SeedQueryableSource();

            var firstItem = Queryable.First();

            Assert.Multiple(() =>
            {
                var ex1 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult1 = Queryable.TakeWhile(x => x.Equals(firstItem)).ToList();
                });

                //Assert.That(ex1.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));

                var ex2 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult2 = Queryable.TakeWhile(x => x.Equals(firstItem)).ToList();
                });

                //Assert.That(ex2.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));
            });
        }

        [Test]
        public virtual void TakeWhile_TakeFirstItemUsingIndex_ThrowsException()
        {
            SeedQueryableSource();

            Assert.Multiple(() =>
            {
                var ex1 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult1 = Queryable.TakeWhile((x, i) => i.Equals(0)).ToList();
                });

                //Assert.That(ex1.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));

                var ex2 = Assert.Throws<InvalidOperationException>(() =>
                {
                    var actualResult2 = Queryable.TakeWhile((x, i) => i.Equals(0)).ToList();
                });

                //Assert.That(ex2.Message, Is.EqualTo(string.Format(ExceptionMessages.TranslationFailedExceptionMessage, typeof(T).Name)));
            });
        }

        [Test]
        public virtual async Task ToListAsync_ReturnsList()
        {
            SeedQueryableSource();

            var expectedResult = Queryable.ToList();

            var actualResult1 = await Queryable.ToListAsync();
            var actualResult2 = await Queryable.ToListAsync();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult));
                Assert.That(actualResult2, Is.EquivalentTo(expectedResult));
            });
        }

        [Test]
        public virtual void Where_Condition_ReturnsItemsThatSatisfyCondition()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Where(x => !x.Id.Equals(default)).ToList();
            var actualResult2 = Queryable.Where(x => !x.Id.Equals(default)).ToList();

            Assert.Multiple(() =>
            {
                for (var i = 0; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    var item = ItemsAddedToQueryableSource[i];
                    Assert.That(item.Id, Is.Not.EqualTo(default(Guid)));

                    Assert.That(actualResult1[i], Is.EqualTo(item));
                    Assert.That(actualResult1[i].Id, Is.Not.EqualTo(default(Guid)));

                    Assert.That(actualResult2[i], Is.EqualTo(item));
                    Assert.That(actualResult2[i].Id, Is.Not.EqualTo(default(Guid)));
                }
            });
        }

        [Test]
        public async Task ProjectToThenToListAsync_ReturnsExpectedResult()
        {
            SeedQueryableSource();

            var expectedResult = new AsyncEnumerable<TestViewModel>(Queryable.Select(x => new TestViewModel { id = x.Id, fullName = x.FullName }));

            var mapper = new Mapper(new MapperConfiguration(x => x.AddProfile(new MappingProfile())));

            Console.WriteLine("ProjectTo about to be invoked");

            var actualResult = await mapper.ProjectTo<TestViewModel>(Queryable, null).ToListAsync();

            var compareLogic = new CompareLogic { Config = { IgnoreObjectTypes = true, IgnoreCollectionOrder = true } };
            var comparisonResult = compareLogic.Compare(expectedResult, actualResult);

            Assert.That(comparisonResult.AreEqual, Is.True);
        }

        [Test]
        public virtual void ToListThenElementAt_Zero_ReturnsFirstElement()
        {
            SeedQueryableSource();

            var firstElement = Queryable.ToList().ElementAt(0);

            Assert.That(firstElement, Is.EqualTo(ItemsAddedToQueryableSource.First()));
        }

        [Test]
        public virtual void WhereWithSelect_Condition_ReturnsIdsThatSatisfyCondition()
        {
            SeedQueryableSource();

            var actualResult1 = Queryable.Where(x => !x.Id.Equals(default)).Select(x => x.Id).ToList();
            var actualResult2 = Queryable.Where(x => !x.Id.Equals(default)).Select(x => x.Id).ToList();

            Assert.Multiple(() =>
            {
                for (var i = 0; i < ItemsAddedToQueryableSource.Count; i++)
                {
                    var item = ItemsAddedToQueryableSource[i];
                    Assert.That(item.Id, Is.Not.EqualTo(default(Guid)));

                    Assert.That(actualResult1[i], Is.EqualTo(item.Id));
                    Assert.That(actualResult1[i], Is.Not.EqualTo(default(Guid)));

                    Assert.That(actualResult2[i], Is.EqualTo(item.Id));
                    Assert.That(actualResult2[i], Is.Not.EqualTo(default(Guid)));
                }
            });
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForReadOnlyDbSetTests.cs
================================================
using System;
using System.Collections.Generic;
using Microsoft.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using AutoFixture;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class BaseForReadOnlyDbSetTests<TEntity> : BaseForMockedQueryableTests<TEntity> where TEntity : BaseTestEntity
    {
        protected override void SeedQueryableSource()
        {
            var itemsToAdd = Fixture.Build<TEntity>().With(p => p.CreatedAt, DateTime.Today).With(p => p.LastModifiedAt, DateTime.Today).CreateMany().ToList();
            AddRangeToReadOnlySource(DbSet, itemsToAdd);
            //MockedDbContext.SaveChanges();
            ItemsAddedToQueryableSource = itemsToAdd;
        }

        protected abstract void AddToReadOnlySource(DbSet<TEntity> mockedDbQuery, TEntity item);

        protected abstract void AddRangeToReadOnlySource(DbSet<TEntity> mockedDbQuery, IEnumerable<TEntity> items);

        protected abstract void ClearReadOnlySource(DbSet<TEntity> mockedDbQuery);

        [Test]
        public virtual void AddRangeToReadOnlySource_Items_AddsItemsToReadOnlySource()
        {
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();

            AddRangeToReadOnlySource(DbSet, expectedResult);

            Assert.That(DbSet, Is.EquivalentTo(expectedResult));
        }

        [Test]
        public virtual void AddRangeToReadOnlySourceThenAddRangeToReadOnlySource_Items_AddsAllItemsToReadOnlySource()
        {
            var expectedResult = Fixture.CreateMany<TEntity>(4).ToList();

            AddRangeToReadOnlySource(DbSet, expectedResult.Take(2));
            AddRangeToReadOnlySource(DbSet, expectedResult.Skip(2));

            Assert.That(DbSet, Is.EquivalentTo(expectedResult));
        }

        [Test]
        public virtual void AddToReadOnlySource_Item_AddsItemToReadOnlySource()
        {
            var expectedResult = Fixture.Create<TEntity>();

            AddToReadOnlySource(DbSet, expectedResult);
            var numberOfItemsAdded = DbSet.ToList().Count;

            Assert.That(numberOfItemsAdded, Is.EqualTo(1));
        }

        [Test]
        public virtual void AddToReadOnlySourceThenAddToReadOnlySource_Items_AddsBothItemsToReadOnlySource()
        {
            var expectedResult = Fixture.CreateMany<TEntity>(2).ToList();

            AddToReadOnlySource(DbSet, expectedResult.First());
            AddToReadOnlySource(DbSet, expectedResult.Last());

            Assert.That(DbSet, Is.EquivalentTo(expectedResult));
        }

        [Test]
        public virtual void AnyThenAddToReadOnlySourceThenAny_ReturnsFalseThenTrue()
        {
            var actualResult1 = DbSet.Any();
            AddToReadOnlySource(DbSet, Fixture.Create<TEntity>());
            var actualResult2 = DbSet.Any();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.False);
                Assert.That(actualResult2, Is.True);
            });
        }

        [Test]
        public virtual async Task AsAsyncEnumerable_ReturnsAsyncEnumerable()
        {
            var expectedResult = Fixture.Create<TEntity>();
            AddToReadOnlySource(DbSet, expectedResult);

            var asyncEnumerable = DbSet.AsAsyncEnumerable();

            var actualResults = new List<TEntity>();
            await foreach (var item in asyncEnumerable)
            {
                actualResults.Add(item);
            }

            Assert.Multiple(() =>
            {
                Assert.That(actualResults.Single(), Is.EqualTo(expectedResult));
                Assert.That(actualResults.Single(), Is.EqualTo(expectedResult));
            });
        }

        [Test]
        public virtual void AsQueryable_ReturnsQueryable()
        {
            var expectedResult = Fixture.Create<TEntity>();
            AddToReadOnlySource(DbSet, expectedResult);

            var queryable = DbSet.AsQueryable();

            Assert.Multiple(() =>
            {
                Assert.That(queryable.Single(), Is.EqualTo(expectedResult));
                Assert.That(queryable.Single(), Is.EqualTo(expectedResult));
            });
        }

        [Test]
        public virtual void ClearReadOnlySource_WithNoItemsAddedToReadOnlySource_DoesNothing()
        {
            var preActNumberOfItems = DbSet.ToList().Count;

            ClearReadOnlySource(DbSet);

            var postActNumberOfItems = DbSet.ToList().Count;
            Assert.Multiple(() =>
            {
                Assert.That(preActNumberOfItems, Is.EqualTo(0));
                Assert.That(postActNumberOfItems, Is.EqualTo(preActNumberOfItems));
            });
        }

        [Test]
        public virtual void ClearReadOnlySourceWithExistingItems_RemovesAllItemsFromReadOnlySource()
        {
            var expectedResult = Fixture.CreateMany<TEntity>().ToList();
            AddRangeToReadOnlySource(DbSet, expectedResult);
            var numberOfItemsAdded = DbSet.ToList().Count;

            ClearReadOnlySource(DbSet);

            Assert.Multiple(() =>
            {
                Assert.That(numberOfItemsAdded, Is.EqualTo(expectedResult.Count));
                Assert.That(DbSet.Any(), Is.False);
            });
        }

        [Test]
        public override void FromSqlRaw_QueryProviderWithManyFromSqlResults_ReturnsExpectedResults()
        {
            var sql1 = "sp_NoParams";
            var expectedResult1 = Fixture.CreateMany<TEntity>().ToList();

            var sql2 = "sp_WithParams";
            var parameters2 = new List<SqlParameter> { new("@SomeParameter1", "Value1"), new("@SomeParameter2", "Value2") };
            var expectedResult2 = Fixture.CreateMany<TEntity>().ToList();

            AddFromSqlRawResult(DbSet, sql1, expectedResult1);

            //Change the source, this will force the query provider mock to aggregate
            AddRangeToReadOnlySource(DbSet, Fixture.CreateMany<TEntity>().ToList());

            AddFromSqlRawResult(DbSet, sql2, parameters2, expectedResult2);

            Console.WriteLine("actualResult1");
            var actualResult1 = DbSet.FromSqlRaw("[dbo].[sp_NoParams]").ToList();

            Console.WriteLine("actualResult2");
            var actualResult2 = DbSet.FromSqlRaw("[dbo].[sp_WithParams]", parameters2.ToArray()).ToList();

            Assert.Multiple(() =>
            {
                Assert.That(actualResult1, Is.EquivalentTo(expectedResult1));
                Assert.That(actualResult2, Is.EquivalentTo(expectedResult2));
            });
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForTests.cs
================================================
using AutoFixture;
using Microsoft.Extensions.Logging;
using NUnit.Framework;
using rgvlee.Core.Common.Helpers;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class BaseForTests
    {
        protected Fixture Fixture;

        [SetUp]
        public virtual void SetUp()
        {
            LoggingHelper.LoggerFactory = LoggerFactory.Create(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Trace));

            Fixture = new Fixture();
        }

        [TearDown]
        public virtual void TearDown()
        {
            LoggingHelper.LoggerFactory.Dispose();
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseTestEntity.cs
================================================
using System;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class BaseTestEntity
    {
        public Guid Id { get; set; }

        public string FullName { get; set; }

        public decimal Weight { get; set; }

        public decimal Height { get; set; }

        public DateTime DateOfBirth { get; set; }

        public DateTime CreatedAt { get; set; }

        public DateTime LastModifiedAt { get; set; }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/EntityFrameworkCore.Testing.Common.Tests.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <WarningsAsErrors>NU1605</WarningsAsErrors>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <WarningsAsErrors>NU1605</WarningsAsErrors>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="AutoFixture" Version="4.18.1" />
    <PackageReference Include="AutoMapper" Version="14.0.0" />
    <PackageReference Include="CompareNETObjects" Version="4.84.0" />
    <PackageReference Include="coverlet.msbuild" Version="6.0.4">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="FluentAssertions" Version="7.2.0" />
    <PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.3" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.0" />
    <PackageReference Include="NUnit" Version="4.4.0" />
    <PackageReference Include="NUnit.Analyzers" Version="4.11.2">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="NUnit3TestAdapter" Version="5.2.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\EntityFrameworkCore.Testing.Common\EntityFrameworkCore.Testing.Common.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue114Tests.cs
================================================
using System.Linq;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class Issue114Tests : BaseForTests
    {
        protected abstract TestDbContext MockedDbContextFactory();

        [Test]
        public void Any_ForReadOnlyEntityWithNoDbContextProperty_IsFalse()
        {
            var mockedContext = MockedDbContextFactory();

            mockedContext.Set<Foo>().Any().Should().BeFalse();
        }

        public class TestDbContext : DbContext
        {
            public TestDbContext(DbContextOptions<TestDbContext> options) : base(options) { }

            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Foo>().HasNoKey();
            }
        }

        public class Foo
        {
            public string Bar { get; set; }
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue117Tests.cs
================================================
using System.Linq;
using AutoFixture;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;
using static FluentAssertions.FluentActions;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class Issue117Tests : BaseForTests
    {
        protected abstract TestDbContext MockedDbContextFactory();

        [Test]
        public void DbContextDispose_InvokedViaUsingBlock_DoesNotThrowException()
        {
            Invoking(() =>
            {
                using (MockedDbContextFactory()) { }
            }).Should().NotThrow();
        }

        [Test]
        public void DbContextDispose_DoesNotThrowException()
        {
            Invoking(() => MockedDbContextFactory().Dispose()).Should().NotThrow();
        }

        [Test]
        public void DbContextAddRange_DoesNotThrowException()
        {
            Invoking(() => MockedDbContextFactory().AddRange(Fixture.CreateMany<Foo>())).Should().NotThrow();
        }

        [Test]
        public void DbContextAddRangeThenSaveChanges_WithinUsingBlock_PersistsMutableEntities()
        {
            using (var dbContext = MockedDbContextFactory())
            {
                var entities = Fixture.CreateMany<Foo>();

                dbContext.AddRange(entities);
                dbContext.SaveChanges();

                dbContext.Set<Foo>().ToList().Should().BeEquivalentTo(entities);
            }
        }

        public class TestDbContext : DbContext
        {
            public TestDbContext(DbContextOptions<TestDbContext> options) : base(options) { }

            public virtual DbSet<Foo> MutableEntities { get; set; }

            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Foo>().HasKey(c => c.Id);
            }
        }

        public class Foo
        {
            public string Id { get; set; }

            public string Bar { get; set; }
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue126Tests.cs
================================================
using System;
using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests;

public abstract class Issue126Tests<TDbContext> : BaseForTests where TDbContext : DbContext
{
    protected Func<TDbContext> DbContextFactory;

    [Test]
    public virtual void BeginTransaction_ReturnsMockTransaction()
    {
        using var transaction = DbContextFactory().Database.BeginTransaction();
        transaction.Should().NotBeNull();
    }

    [TestCase(true)]
    [TestCase(false)]
    public virtual async Task BeginTransactionAsync_ReturnsMockTransaction(bool withCancellationTokenParameter)
    {
        await using var transaction = withCancellationTokenParameter
            ? await DbContextFactory().Database.BeginTransactionAsync(CancellationToken.None)
            : await DbContextFactory().Database.BeginTransactionAsync();
        
        transaction.Should().NotBeNull();
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue49Tests.cs
================================================
using AutoFixture;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class Issue49Tests<TDbContext, TEntity> : BaseForTests where TDbContext : DbContext
        where TEntity : BaseTestEntity
    {
        protected TDbContext DbContext;

        [Test]
        public virtual void EntityEntryState_Entity_IsDetached()
        {
            var entity = Fixture.Create<TEntity>();

            var actualResult = DbContext.Entry(entity).State;

            actualResult.Should().Be(EntityState.Detached);
        }

        [Test]
        public virtual void EntityEntryState_EntityAsObject_IsDetached()
        {
            var entity = Fixture.Create<TEntity>();

            var actualResult = DbContext.Entry((object) entity).State;

            actualResult.Should().Be(EntityState.Detached);
        }

        [Test]
        public virtual void DbContextAdd_Entity_IsAdded()
        {
            var entity = Fixture.Create<TEntity>();

            var actualResult = DbContext.Add(entity);

            actualResult.State.Should().Be(EntityState.Added);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue88Tests.cs
================================================
using System;
using System.Linq;
using AutoFixture;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class Issue88Tests<TDbContext, TEntity> : BaseForTests where TDbContext : DbContext
        where TEntity : BaseTestEntity
    {
        protected Func<TDbContext> DbContextFactory;

        [Test]
        public virtual void AddThenSaveChanges_ChangesVisibleAnyDbContext()
        {
            var entity = Fixture.Create<TEntity>();

            var dbContext = DbContextFactory();

            dbContext.Set<TEntity>().Add(entity);
            dbContext.SaveChanges();

            dbContext.Find<TEntity>(entity.Id).Should().BeEquivalentTo(entity);
            dbContext.Set<TEntity>().Single(x => x.Id.Equals(entity.Id)).Should().BeEquivalentTo(entity);

            var anotherDbContext = DbContextFactory();
            anotherDbContext.Find<TEntity>(entity.Id).Should().BeEquivalentTo(entity);
            anotherDbContext.Set<TEntity>().Single(x => x.Id.Equals(entity.Id)).Should().BeEquivalentTo(entity);
        }

        [Test]
        public virtual void BeginTransactionThenAddThenSaveChangesThenCommit_ChangesVisibleAnyDbContext()
        {
            var entity = Fixture.Create<TEntity>();

            var dbContext = DbContextFactory();

            using (var transaction = dbContext.Database.BeginTransaction())
            {
                dbContext.Set<TEntity>().Add(entity);
                dbContext.SaveChanges();
                transaction.Commit();
            }

            dbContext.Find<TEntity>(entity.Id).Should().BeEquivalentTo(entity);
            dbContext.Set<TEntity>().Single(x => x.Id.Equals(entity.Id)).Should().BeEquivalentTo(entity);

            var anotherDbContext = DbContextFactory();
            anotherDbContext.Find<TEntity>(entity.Id).Should().BeEquivalentTo(entity);
            anotherDbContext.Set<TEntity>().Single(x => x.Id.Equals(entity.Id)).Should().BeEquivalentTo(entity);
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/MappingProfile.cs
================================================
using AutoMapper;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public class MappingProfile : Profile
    {
        public MappingProfile()
        {
            CreateMap<TestEntity, TestViewModel>();

            CreateMap<TestReadOnlyEntity, TestViewModel>();
        }
    }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/NotRegisteredEntity.cs
================================================
namespace EntityFrameworkCore.Testing.Common.Tests
{
    public class NotRegisteredEntity : BaseTestEntity { }
}

================================================
FILE: src/EntityFrameworkCore.Testing.Common.Tests/ReadOnlyDbSetExceptionTests.cs
================================================
using System;
using AutoFixture;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace EntityFrameworkCore.Testing.Common.Tests
{
    public abstract class ReadOnlyDbSetExceptionTests<TEntity> : BaseForTests where TEntity : BaseTestEntity
    {
        protected abstract DbSet<TEntity> DbSet { get; }

        [Test]
        public void Add_Item_ThrowsException()
        {
            var ex = Assert.Throws<InvalidOperationException>(() =>
            {
                DbSet.Add(Fixture.Create<TEntity>());
            });
            Assert.That(ex.Message,
                Is.EqualTo(
                    $"Unable to track an instance of type '{typeof(TEntity).Name}' because it does not have a primary key. Only entity types with a primary key may be tracked."));
        }

        [Test]
        public void AddAsync_Item_ThrowsException()
        {
            var ex = Assert.ThrowsAsync<InvalidOperationException>(async () =>
            {
                await DbSet.AddAsync(Fixture.Create<TEntity>());
            });
            Assert.That(ex.Message,
                Is.EqualTo(
                    $"Unable to track an instance of type '{typeof(TEntity).Name}' because it does not have a primary key. Only entity types with a primary key may be tracked."));
        }

        [Test]
        public void AddRange_Items_ThrowsException()
        {
            var ex = Assert.Throws<InvalidOperationException>(() =>
            {
                DbSet.AddRange(Fixture.CreateMany<TEntity>());
Download .txt
gitextract_5vjkh0op/

├── .github/
│   └── workflows/
│       ├── continuous-integration-checks.yml
│       └── release.yml
├── .gitignore
├── EntityFrameworkCore.Testing.Moq.nuspec
├── EntityFrameworkCore.Testing.NSubstitute.nuspec
├── EntityFrameworkCore.Testing.sln
├── LICENSE
├── README.md
├── TODO.md
├── googlea6bd68d4a55b1e59.html
└── src/
    ├── EntityFrameworkCore.DefaultBehaviour.Tests/
    │   ├── ByTypeDbSetTests.cs
    │   ├── ByTypeReadOnlyDbSetExceptionTests.cs
    │   ├── ByTypeReadOnlyDbSetTests.cs
    │   ├── DbContextTests.cs
    │   ├── EntityFrameworkCore.DefaultBehaviour.Tests.csproj
    │   ├── Issue114Tests.cs
    │   ├── Issue117Tests.cs
    │   ├── Issue49Tests.cs
    │   └── Issue88Tests.cs
    ├── EntityFrameworkCore.Testing.Common/
    │   ├── AsyncEnumerable.cs
    │   ├── AsyncEnumerator.cs
    │   ├── AsyncQueryProvider.cs
    │   ├── EntityFrameworkCore.Testing.Common.csproj
    │   ├── EntityFrameworkCore.Testing.Common.xml
    │   ├── ExceptionMessages.Designer.cs
    │   ├── ExceptionMessages.resx
    │   ├── Helpers/
    │   │   ├── BaseMockedDbContextBuilder.cs
    │   │   ├── BaseMockedDbContextFactory.cs
    │   │   ├── ExpressionHelper.cs
    │   │   ├── IMockedDbContextBuilder.cs
    │   │   ├── MockedDbContextFactoryOptions.cs
    │   │   └── ParameterMatchingHelper.cs
    │   └── QueryRootExpression.cs
    ├── EntityFrameworkCore.Testing.Common.Tests/
    │   ├── AsyncEnumerableTests.cs
    │   ├── BaseForDbContextTests.cs
    │   ├── BaseForDbSetTests.cs
    │   ├── BaseForMockedQueryableTests.cs
    │   ├── BaseForQueryableTests.cs
    │   ├── BaseForReadOnlyDbSetTests.cs
    │   ├── BaseForTests.cs
    │   ├── BaseTestEntity.cs
    │   ├── EntityFrameworkCore.Testing.Common.Tests.csproj
    │   ├── Issue114Tests.cs
    │   ├── Issue117Tests.cs
    │   ├── Issue126Tests.cs
    │   ├── Issue49Tests.cs
    │   ├── Issue88Tests.cs
    │   ├── MappingProfile.cs
    │   ├── NotRegisteredEntity.cs
    │   ├── ReadOnlyDbSetExceptionTests.cs
    │   ├── TestDbContext.cs
    │   ├── TestEntity.cs
    │   ├── TestReadOnlyEntity.cs
    │   └── TestViewModel.cs
    ├── EntityFrameworkCore.Testing.Moq/
    │   ├── Create.cs
    │   ├── EntityFrameworkCore.Testing.Moq.csproj
    │   ├── EntityFrameworkCore.Testing.Moq.xml
    │   ├── Extensions/
    │   │   ├── DbContextExtensions.cs
    │   │   ├── DbSetExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.cs
    │   │   ├── QueryableExtensions.cs
    │   │   ├── ReadOnlyDbSetExtensions.Internal.cs
    │   │   └── ReadOnlyDbSetExtensions.cs
    │   └── Helpers/
    │       ├── MockedDbContextBuilder.cs
    │       ├── MockedDbContextFactory.Internal.cs
    │       └── NoSetUpDefaultValueProvider.cs
    ├── EntityFrameworkCore.Testing.Moq.Tests/
    │   ├── BaseForDbContextTests.cs
    │   ├── BaseForDbQueryTests.cs
    │   ├── BaseForDbSetTests.cs
    │   ├── ByPropertyDbSetTests.cs
    │   ├── ByPropertyReadOnlyDbSetExceptionTests.cs
    │   ├── ByPropertyReadOnlyDbSetTests.cs
    │   ├── ByTypeDbSetTests.cs
    │   ├── ByTypeReadOnlyDbSetExceptionTests.cs
    │   ├── ByTypeReadOnlyDbSetTests.cs
    │   ├── CreateFactoryTests.cs
    │   ├── DbContextTestsUsingConstructorParameters.cs
    │   ├── DbContextTestsUsingType.cs
    │   ├── EntityFrameworkCore.Testing.Moq.Tests.csproj
    │   ├── Issue114Tests.cs
    │   ├── Issue117Tests.cs
    │   ├── Issue126Tests.cs
    │   ├── Issue1Tests.cs
    │   ├── Issue49Tests.cs
    │   ├── Issue4Tests.cs
    │   ├── Issue6Tests.cs
    │   └── Issue88Tests.cs
    ├── EntityFrameworkCore.Testing.NSubstitute/
    │   ├── Create.cs
    │   ├── EntityFrameworkCore.Testing.NSubstitute.csproj
    │   ├── EntityFrameworkCore.Testing.NSubstitute.xml
    │   ├── Extensions/
    │   │   ├── DbContextExtensions.cs
    │   │   ├── DbSetExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.Internal.cs
    │   │   ├── QueryProviderExtensions.cs
    │   │   ├── QueryableExtensions.cs
    │   │   ├── ReadOnlyDbSetExtensions.Internal.cs
    │   │   └── ReadOnlyDbSetExtensions.cs
    │   └── Helpers/
    │       ├── MockedDbContextBuilder.cs
    │       ├── MockedDbContextFactory.Internal.cs
    │       └── NoSetUpHandler.cs
    └── EntityFrameworkCore.Testing.NSubstitute.Tests/
        ├── BaseForDbContextTests.cs
        ├── BaseForDbQueryTests.cs
        ├── BaseForDbSetTests.cs
        ├── ByPropertyDbSetTests.cs
        ├── ByPropertyReadOnlyDbSetExceptionTests.cs
        ├── ByPropertyReadOnlyDbSetTests.cs
        ├── ByTypeDbSetTests.cs
        ├── ByTypeReadOnlyDbSetExceptionTests.cs
        ├── ByTypeReadOnlyDbSetTests.cs
        ├── CreateFactoryTests.cs
        ├── DbContextTestsUsingConstructorParameters.cs
        ├── DbContextTestsUsingType.cs
        ├── EntityFrameworkCore.Testing.NSubstitute.Tests.csproj
        ├── Issue114Tests.cs
        ├── Issue117Tests.cs
        ├── Issue126Tests.cs
        ├── Issue1Tests.cs
        ├── Issue49Tests.cs
        ├── Issue4Tests.cs
        ├── Issue6Tests.cs
        └── Issue88Tests.cs
Download .txt
SYMBOL INDEX (494 symbols across 101 files)

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeDbSetTests.cs
  class ByTypeDbSetTests (line 14) | public class ByTypeDbSetTests : BaseForQueryableTests<TestEntity>
    method SetUp (line 22) | [SetUp]
    method SeedQueryableSource (line 30) | protected override void SeedQueryableSource()
    method AsAsyncEnumerable_ReturnsAsyncEnumerable (line 38) | [Test]
    method AsQueryable_ReturnsQueryable (line 57) | [Test]
    method FromSqlInterpolated_ThrowsException (line 73) | [Test]
    method FromSqlRaw_ThrowsException (line 79) | [Test]

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeReadOnlyDbSetExceptionTests.cs
  class ReadOnlyDbSetExceptionTests (line 8) | public class ReadOnlyDbSetExceptionTests : ReadOnlyDbSetExceptionTests<T...
    method SetUp (line 14) | [SetUp]

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeReadOnlyDbSetTests.cs
  class ByTypeReadOnlyDbSetTests (line 9) | public class ByTypeReadOnlyDbSetTests : BaseForTests
    method SetUp (line 15) | [SetUp]
    method AsAsyncEnumerable_ReturnsAsyncEnumerable (line 23) | [Test]
    method AsQueryable_ReturnsQueryable (line 31) | [Test]
    method ContainsListCollection_ReturnsFalse (line 39) | [Test]

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/DbContextTests.cs
  class DbContextTests (line 10) | public class DbContextTests : BaseForTests
    method SetUp (line 14) | [SetUp]
    method ExecuteSqlInterpolated_ThrowsException (line 22) | [Test]
    method ExecuteSqlRaw_ThrowsException (line 31) | [Test]
    method Set_TypeNotIncludedInModel_ThrowsException (line 40) | [Test]
    method SetCommandTimeout_ValidTimeout_ThrowsException (line 50) | [Test]
    method GetCommandTimeout_ThrowsException (line 59) | [Test]

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue114Tests.cs
  class Issue114Tests (line 6) | public class Issue114Tests : Testing.Common.Tests.Issue114Tests
    method MockedDbContextFactory (line 8) | protected override TestDbContext MockedDbContextFactory()

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue117Tests.cs
  class Issue117Tests (line 6) | public class Issue117Tests : Testing.Common.Tests.Issue117Tests
    method MockedDbContextFactory (line 8) | protected override TestDbContext MockedDbContextFactory()

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue49Tests.cs
  class Issue49Tests (line 8) | public class Issue49Tests : Issue49Tests<TestDbContext, TestEntity>
    method SetUp (line 10) | [SetUp]

FILE: src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue88Tests.cs
  class Issue88Tests (line 9) | public class Issue88Tests : Issue88Tests<TestDbContext, TestEntity>
    method SetUp (line 11) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/AsyncEnumerableTests.cs
  class AsyncEnumerableTests (line 9) | public class AsyncEnumerableTests : BaseForQueryableTests<TestEntity>
    method SetUp (line 15) | [SetUp]
    method SeedQueryableSource (line 23) | protected override void SeedQueryableSource()

FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForDbContextTests.cs
  class BaseForDbContextTests (line 13) | public abstract class BaseForDbContextTests<TDbContext> : BaseForTests w...
    method AddExecuteSqlInterpolatedResult (line 17) | public abstract void AddExecuteSqlInterpolatedResult(TDbContext mocked...
    method AddExecuteSqlInterpolatedResult (line 19) | public abstract void AddExecuteSqlInterpolatedResult(TDbContext mocked...
    method AddExecuteSqlInterpolatedResult (line 21) | public abstract void AddExecuteSqlInterpolatedResult(TDbContext mocked...
    method AddExecuteSqlRawResult (line 23) | public abstract void AddExecuteSqlRawResult(TDbContext mockedDbContext...
    method AddExecuteSqlRawResult (line 25) | public abstract void AddExecuteSqlRawResult(TDbContext mockedDbContext...
    method AddExecuteSqlRawResult (line 27) | public abstract void AddExecuteSqlRawResult(TDbContext mockedDbContext...
    method ExecuteSqlInterpolated_AnySql_ReturnsExpectedResult (line 29) | [Test]
    method ExecuteSqlInterpolated_SpecifiedFormattableStringWithSqlParameterParameters_ReturnsExpectedResult (line 45) | [Test]
    method ExecuteSqlInterpolated_SpecifiedFormattableStringWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException (line 63) | [Test]
    method ExecuteSqlInterpolated_SpecifiedSql_ReturnsExpectedResult (line 83) | [Test]
    method ExecuteSqlInterpolated_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException (line 100) | [Test]
    method ExecuteSqlInterpolated_WithNoMatchesAdded_ThrowsException (line 113) | [Test]
    method ExecuteSqlInterpolatedAsync_AnySql_ReturnsExpectedResult (line 122) | [Test]
    method ExecuteSqlInterpolatedAsync_SpecifiedFormattableStringWithSqlParameterParameters_ReturnsExpectedResult (line 138) | [Test]
    method ExecuteSqlInterpolatedAsync_SpecifiedFormattableStringWithStringParameters_ReturnsExpectedResult (line 156) | [Test]
    method ExecuteSqlInterpolatedAsync_SpecifiedSql_ReturnsExpectedResult (line 174) | [Test]
    method ExecuteSqlInterpolatedAsync_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException (line 191) | [Test]
    method ExecuteSqlInterpolatedUsingFormattableStringSetUp_SpecifiedFormattableStringWithStringParameters_ReturnsExpectedResult (line 204) | [Test]
    method ExecuteSqlInterpolatedUsingFormattableStringSetUp_SpecifiedFormattableStringWithStringParametersThatDoesNotMatchSetUp_ThrowsException (line 222) | [Test]
    method ExecuteSqlInterpolatedUsingSqlAndParameterSetUp_SpecifiedFormattableStringWithStringParameters_ReturnsExpectedResult (line 240) | [Test]
    method ExecuteSqlRaw_AnySql_ReturnsExpectedResult (line 258) | [Test]
    method ExecuteSqlRaw_SpecifiedSql_ReturnsExpectedResult (line 274) | [Test]
    method ExecuteSqlRaw_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException (line 291) | [Test]
    method ExecuteSqlRaw_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult (line 304) | [Test]
    method ExecuteSqlRaw_SpecifiedSqlWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException (line 322) | [Test]
    method ExecuteSqlRaw_SpecifiedSqlWithStringParameters_ReturnsExpectedResult (line 342) | [Test]
    method ExecuteSqlRaw_WithNoMatchesAdded_ThrowsException (line 360) | [Test]
    method ExecuteSqlRawAsync_AnySql_ReturnsExpectedResult (line 369) | [Test]
    method ExecuteSqlRawAsync_SpecifiedSql_ReturnsExpectedResult (line 385) | [Test]
    method ExecuteSqlRawAsync_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException (line 402) | [Test]
    method ExecuteSqlRawAsync_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult (line 415) | [Test]
    method ExecuteSqlRawAsync_SpecifiedSqlWithStringParameters_ReturnsExpectedResult (line 433) | [Test]
    method Set_TypeNotIncludedInModel_ThrowsException (line 451) | [Test]
    method SetCommandTimeout_ValidTimeout_DoesNotThrowException (line 461) | [Test]
    method GetCommandTimeout_ReturnsZero (line 470) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForDbSetTests.cs
  class BaseForDbSetTests (line 11) | public abstract class BaseForDbSetTests<TDbContext, TEntity> : BaseForMo...
    method SetUp (line 16) | [SetUp]
    method TearDown (line 24) | [TearDown]
    method SeedQueryableSource (line 32) | protected override void SeedQueryableSource()
    method CreateMockedDbContext (line 40) | protected abstract TDbContext CreateMockedDbContext();
    method AddAndPersist_Item_AddsAndPersistsItem (line 42) | [Test]
    method AddAndPersist_Items_AddsAndPersistsItems (line 57) | [Test]
    method AddAndPersistAsync_Item_AddsAndPersistsItem (line 74) | [Test]
    method AddAndPersistAsync_Items_AddsAndPersistsItems (line 89) | [Test]
    method AddThenSingleThenAddRangeThenToListThenWhereThenSelect_ReturnsExpectedResults (line 106) | [Test]
    method AnyThenAddThenPersistThenAny_ReturnsFalseThenTrue (line 137) | [Test]
    method AsAsyncEnumerable_ReturnsAsyncEnumerable (line 152) | [Test]
    method AsQueryable_ReturnsQueryable (line 174) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForMockedQueryableTests.cs
  class BaseForMockedQueryableTests (line 13) | public abstract class BaseForMockedQueryableTests<TEntity> : BaseForQuer...
    method AddFromSqlRawResult (line 17) | protected abstract void AddFromSqlRawResult(DbSet<TEntity> mockedDbSet...
    method AddFromSqlRawResult (line 19) | protected abstract void AddFromSqlRawResult(DbSet<TEntity> mockedDbSet...
    method AddFromSqlRawResult (line 21) | protected abstract void AddFromSqlRawResult(DbSet<TEntity> mockedDbSet...
    method AddFromSqlInterpolatedResult (line 23) | protected abstract void AddFromSqlInterpolatedResult(DbSet<TEntity> mo...
    method AddFromSqlInterpolatedResult (line 25) | protected abstract void AddFromSqlInterpolatedResult(DbSet<TEntity> mo...
    method AddFromSqlInterpolatedResult (line 27) | protected abstract void AddFromSqlInterpolatedResult(DbSet<TEntity> mo...
    method FormattableStringSetUpFromSqlInterpolated_SpecifiedSqlWithStringParameters_ReturnsExpectedResult (line 29) | [Test]
    method FromSqlInterpolated_AnySql_ReturnsExpectedResult (line 48) | [Test]
    method FromSqlInterpolated_SpecifiedSql_ReturnsExpectedResult (line 64) | [Test]
    method FromSqlInterpolated_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException (line 81) | [Test]
    method FromSqlInterpolated_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult (line 94) | [Test]
    method FromSqlInterpolated_SpecifiedSqlWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException (line 112) | [Test]
    method FromSqlInterpolated_SpecifiedSqlWithStringParameters_ReturnsExpectedResult (line 132) | [Test]
    method FromSqlInterpolated_ThrowsException (line 150) | [Test]
    method FromSqlRaw_AnySql_ReturnsExpectedResult (line 159) | [Test]
    method FromSqlRaw_QueryProviderWithManyFromSqlResults_ReturnsExpectedResults (line 175) | [Test]
    method FromSqlRaw_SpecifiedSql_ReturnsExpectedResult (line 201) | [Test]
    method FromSqlRaw_SpecifiedSqlThatDoesNotMatchSetUp_ThrowsException (line 218) | [Test]
    method FromSqlRaw_SpecifiedSqlWithSqlParameterParameters_ReturnsExpectedResult (line 231) | [Test]
    method FromSqlRaw_SpecifiedSqlWithSqlParameterParametersThatDoNotMatchSetUp_ThrowsException (line 249) | [Test]
    method FromSqlRaw_SpecifiedSqlWithStringParameters_ReturnsExpectedResult (line 269) | [Test]
    method FromSqlRaw_ThrowsException (line 287) | [Test]
    method FromSqlRawThenFirstOrDefaultAsync_ReturnsFirstElement (line 296) | [Test]
    method ContainsListCollection_ReturnsFalse (line 313) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForQueryableTests.cs
  class BaseForQueryableTests (line 14) | public abstract class BaseForQueryableTests<T> : BaseForTests where T : ...
    method SeedQueryableSource (line 20) | protected abstract void SeedQueryableSource();
    method All_FalseCondition_ReturnsFalse (line 22) | [Test]
    method All_TrueCondition_ReturnsTrue (line 37) | [Test]
    method AllAsync_FalseCondition_ReturnsFalse (line 52) | [Test]
    method AllAsync_TrueCondition_ReturnsTrue (line 67) | [Test]
    method Any_ReturnsTrue (line 82) | [Test]
    method Any_WithNoItemsAdded_ReturnsFalse (line 97) | [Test]
    method AnyAsync_ReturnsTrue (line 110) | [Test]
    method AnyAsyncWithCancellationToken_ReturnsTrue (line 125) | [Test]
    method Average_Decimal_ReturnsAverage (line 143) | [Test]
    method AverageAsync_Decimal_ReturnsAverage (line 166) | [Test]
    method Contains_FalseCondition_ReturnsFalse (line 189) | [Test]
    method Contains_TrueCondition_ReturnsTrue (line 206) | [Test]
    method ContainsAsync_FalseCondition_ReturnsFalse (line 223) | [Test]
    method ContainsAsync_TrueCondition_ReturnsTrue (line 240) | [Test]
    method ElementAt_ThrowsException (line 257) | [Test]
    method ElementAt_AfterAsEnumerable_DoesNotThrowException (line 280) | [Test]
    method ElementAt_AfterToList_DoesNotThrowException (line 301) | [Test]
    method ElementAtOrDefault_ThrowsException (line 320) | [Test]
    method ElementAtOrDefault_WithNoItemsAdded_ThrowsException (line 343) | [Test]
    method First_ReturnsFirstElement (line 364) | [Test]
    method First_WithNoItemsAdded_ThrowsException (line 379) | [Test]
    method FirstAsync_ReturnsFirstElement (line 388) | [Test]
    method FirstOrDefault_ReturnsFirstElement (line 403) | [Test]
    method FirstOrDefault_WithNoItemsAdded_ReturnsFirstElement (line 418) | [Test]
    method FirstOrDefaultAsync_ReturnsFirstElement (line 431) | [Test]
    method Last_ReturnsLastElement (line 446) | [Test]
    method Last_WithNoItemsAdded_ThrowsException (line 461) | [Test]
    method LastAsync_ReturnsLastElement (line 470) | [Test]
    method LastOrDefault_ReturnsLastElement (line 485) | [Test]
    method LastOrDefault_WithNoItemsAdded_ReturnsLastElement (line 500) | [Test]
    method LastOrDefaultAsync_ReturnsLastElement (line 513) | [Test]
    method Max_DateTime_ReturnsMaxDateTime (line 528) | [Test]
    method MaxAsync_DateTime_ReturnsMaxDateTime (line 552) | [Test]
    method Min_DateTime_ReturnsMinDateTime (line 576) | [Test]
    method MinAsync_DateTime_ReturnsMinDateTime (line 600) | [Test]
    method OrderBy_DateTime_ReturnsItemsInAscendingOrder (line 624) | [Test]
    method OrderByDescending_DateTime_ReturnsItemsInDescendingOrder (line 646) | [Test]
    method OrderByThenOrderBy_FixedDateTimeAndDecimal_ReturnsItemsInAscendingOrder (line 668) | [Test]
    method Select_ReturnsSequence (line 690) | [Test]
    method SelectAnonymousObjectThenToListAsync_ReturnsList (line 708) | [Test]
    method SelectWithIndex_ThrowsException (line 725) | [Test]
    method SelectWithIndexThenWhereThenAny_TrueCondition_ThrowsException (line 748) | [Test]
    method Skip_One_ReturnsSequenceThatDoesNotIncludeFirstItem (line 764) | [Test]
    method SkipWhile_SkipFirstItem_ThrowsException (line 784) | [Test]
    method Take_One_ReturnsFirstItem (line 809) | [Test]
    method TakeWhile_TakeFirstItem_ThrowsException (line 829) | [Test]
    method TakeWhile_TakeFirstItemUsingIndex_ThrowsException (line 854) | [Test]
    method ToListAsync_ReturnsList (line 877) | [Test]
    method Where_Condition_ReturnsItemsThatSatisfyCondition (line 894) | [Test]
    method ProjectToThenToListAsync_ReturnsExpectedResult (line 918) | [Test]
    method ToListThenElementAt_Zero_ReturnsFirstElement (line 937) | [Test]
    method WhereWithSelect_Condition_ReturnsIdsThatSatisfyCondition (line 947) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForReadOnlyDbSetTests.cs
  class BaseForReadOnlyDbSetTests (line 12) | public abstract class BaseForReadOnlyDbSetTests<TEntity> : BaseForMocked...
    method SeedQueryableSource (line 14) | protected override void SeedQueryableSource()
    method AddToReadOnlySource (line 22) | protected abstract void AddToReadOnlySource(DbSet<TEntity> mockedDbQue...
    method AddRangeToReadOnlySource (line 24) | protected abstract void AddRangeToReadOnlySource(DbSet<TEntity> mocked...
    method ClearReadOnlySource (line 26) | protected abstract void ClearReadOnlySource(DbSet<TEntity> mockedDbQue...
    method AddRangeToReadOnlySource_Items_AddsItemsToReadOnlySource (line 28) | [Test]
    method AddRangeToReadOnlySourceThenAddRangeToReadOnlySource_Items_AddsAllItemsToReadOnlySource (line 38) | [Test]
    method AddToReadOnlySource_Item_AddsItemToReadOnlySource (line 49) | [Test]
    method AddToReadOnlySourceThenAddToReadOnlySource_Items_AddsBothItemsToReadOnlySource (line 60) | [Test]
    method AnyThenAddToReadOnlySourceThenAny_ReturnsFalseThenTrue (line 71) | [Test]
    method AsAsyncEnumerable_ReturnsAsyncEnumerable (line 85) | [Test]
    method AsQueryable_ReturnsQueryable (line 106) | [Test]
    method ClearReadOnlySource_WithNoItemsAddedToReadOnlySource_DoesNothing (line 121) | [Test]
    method ClearReadOnlySourceWithExistingItems_RemovesAllItemsFromReadOnlySource (line 136) | [Test]
    method FromSqlRaw_QueryProviderWithManyFromSqlResults_ReturnsExpectedResults (line 152) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseForTests.cs
  class BaseForTests (line 8) | public abstract class BaseForTests
    method SetUp (line 12) | [SetUp]
    method TearDown (line 20) | [TearDown]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/BaseTestEntity.cs
  class BaseTestEntity (line 5) | public abstract class BaseTestEntity

FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue114Tests.cs
  class Issue114Tests (line 8) | public abstract class Issue114Tests : BaseForTests
    method MockedDbContextFactory (line 10) | protected abstract TestDbContext MockedDbContextFactory();
    method Any_ForReadOnlyEntityWithNoDbContextProperty_IsFalse (line 12) | [Test]
    class TestDbContext (line 20) | public class TestDbContext : DbContext
      method TestDbContext (line 22) | public TestDbContext(DbContextOptions<TestDbContext> options) : base...
      method OnModelCreating (line 24) | protected override void OnModelCreating(ModelBuilder modelBuilder)
    class Foo (line 30) | public class Foo

FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue117Tests.cs
  class Issue117Tests (line 10) | public abstract class Issue117Tests : BaseForTests
    method MockedDbContextFactory (line 12) | protected abstract TestDbContext MockedDbContextFactory();
    method DbContextDispose_InvokedViaUsingBlock_DoesNotThrowException (line 14) | [Test]
    method DbContextDispose_DoesNotThrowException (line 23) | [Test]
    method DbContextAddRange_DoesNotThrowException (line 29) | [Test]
    method DbContextAddRangeThenSaveChanges_WithinUsingBlock_PersistsMutableEntities (line 35) | [Test]
    class TestDbContext (line 49) | public class TestDbContext : DbContext
      method TestDbContext (line 51) | public TestDbContext(DbContextOptions<TestDbContext> options) : base...
      method OnModelCreating (line 55) | protected override void OnModelCreating(ModelBuilder modelBuilder)
    class Foo (line 61) | public class Foo

FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue126Tests.cs
  class Issue126Tests (line 10) | public abstract class Issue126Tests<TDbContext> : BaseForTests where TDb...
    method BeginTransaction_ReturnsMockTransaction (line 14) | [Test]
    method BeginTransactionAsync_ReturnsMockTransaction (line 21) | [TestCase(true)]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue49Tests.cs
  class Issue49Tests (line 8) | public abstract class Issue49Tests<TDbContext, TEntity> : BaseForTests w...
    method EntityEntryState_Entity_IsDetached (line 13) | [Test]
    method EntityEntryState_EntityAsObject_IsDetached (line 23) | [Test]
    method DbContextAdd_Entity_IsAdded (line 33) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/Issue88Tests.cs
  class Issue88Tests (line 10) | public abstract class Issue88Tests<TDbContext, TEntity> : BaseForTests w...
    method AddThenSaveChanges_ChangesVisibleAnyDbContext (line 15) | [Test]
    method BeginTransactionThenAddThenSaveChangesThenCommit_ChangesVisibleAnyDbContext (line 33) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/MappingProfile.cs
  class MappingProfile (line 5) | public class MappingProfile : Profile
    method MappingProfile (line 7) | public MappingProfile()

FILE: src/EntityFrameworkCore.Testing.Common.Tests/NotRegisteredEntity.cs
  class NotRegisteredEntity (line 3) | public class NotRegisteredEntity : BaseTestEntity { }

FILE: src/EntityFrameworkCore.Testing.Common.Tests/ReadOnlyDbSetExceptionTests.cs
  class ReadOnlyDbSetExceptionTests (line 8) | public abstract class ReadOnlyDbSetExceptionTests<TEntity> : BaseForTest...
    method Add_Item_ThrowsException (line 12) | [Test]
    method AddAsync_Item_ThrowsException (line 24) | [Test]
    method AddRange_Items_ThrowsException (line 36) | [Test]
    method AddRangeAsync_Items_ThrowsException (line 48) | [Test]
    method Attach_Item_ThrowsException (line 60) | [Test]
    method AttachRange_Items_ThrowsException (line 72) | [Test]
    method Find_Item_ThrowsException (line 84) | [Test]
    method Find_Items_ThrowsException (line 95) | [Test]
    method Local_ThrowsException (line 106) | [Test]
    method Remove_Item_ThrowsException (line 116) | [Test]
    method RemoveRange_Items_ThrowsException (line 128) | [Test]
    method Update_Item_ThrowsException (line 140) | [Test]
    method UpdateRange_Items_ThrowsException (line 152) | [Test]

FILE: src/EntityFrameworkCore.Testing.Common.Tests/TestDbContext.cs
  class TestDbContext (line 7) | public class TestDbContext : DbContext
    method TestDbContext (line 11) | public TestDbContext() { }
    method TestDbContext (line 13) | public TestDbContext(DbContextOptions<TestDbContext> options) : base(o...
    method TestDbContext (line 15) | public TestDbContext(ILogger<TestDbContext> logger, DbContextOptions<T...
    method OnModelCreating (line 20) | protected override void OnModelCreating(ModelBuilder modelBuilder)
    method SaveChanges (line 27) | public override int SaveChanges()

FILE: src/EntityFrameworkCore.Testing.Common.Tests/TestEntity.cs
  class TestEntity (line 3) | public class TestEntity : BaseTestEntity { }

FILE: src/EntityFrameworkCore.Testing.Common.Tests/TestReadOnlyEntity.cs
  class TestReadOnlyEntity (line 3) | public class TestReadOnlyEntity : BaseTestEntity { }

FILE: src/EntityFrameworkCore.Testing.Common.Tests/TestViewModel.cs
  class TestViewModel (line 5) | public class TestViewModel

FILE: src/EntityFrameworkCore.Testing.Common/AsyncEnumerable.cs
  class AsyncEnumerable (line 11) | public class AsyncEnumerable<T> : IAsyncEnumerable<T>, IOrderedQueryable<T>
    method AsyncEnumerable (line 15) | public AsyncEnumerable(IEnumerable<T> enumerable)
    method AsyncEnumerable (line 24) | public AsyncEnumerable(IEnumerable<T> enumerable, QueryRootExpression ...
    method GetAsyncEnumerator (line 29) | public IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancel...
    method GetEnumerator (line 34) | IEnumerator<T> IEnumerable<T>.GetEnumerator()
    method GetEnumerator (line 39) | IEnumerator IEnumerable.GetEnumerator()

FILE: src/EntityFrameworkCore.Testing.Common/AsyncEnumerator.cs
  class AsyncEnumerator (line 6) | public class AsyncEnumerator<T> : IAsyncEnumerator<T>
    method AsyncEnumerator (line 10) | public AsyncEnumerator(IEnumerable<T> enumerable)
    method DisposeAsync (line 15) | public ValueTask DisposeAsync()
    method MoveNextAsync (line 20) | public ValueTask<bool> MoveNextAsync()

FILE: src/EntityFrameworkCore.Testing.Common/AsyncQueryProvider.cs
  class AsyncQueryProvider (line 17) | public class AsyncQueryProvider<T> : IAsyncQueryProvider
    method AsyncQueryProvider (line 21) | public AsyncQueryProvider(IEnumerable<T> enumerable)
    method CreateQuery (line 33) | public virtual IQueryable CreateQuery(Expression expression)
    method CreateQuery (line 58) | public virtual IQueryable<TElement> CreateQuery<TElement>(Expression e...
    method Execute (line 74) | public virtual object Execute(Expression expression)
    method Execute (line 82) | public virtual TResult Execute<TResult>(Expression expression)
    method ExecuteAsync (line 90) | public virtual TResult ExecuteAsync<TResult>(Expression expression, Ca...
    method WrapExecuteAsync (line 98) | private Task<TResult> WrapExecuteAsync<TResult>(Expression expression,...
    method EnsureExpressionCanBeResolvedBySourceProvider (line 103) | private Expression EnsureExpressionCanBeResolvedBySourceProvider(Expre...

FILE: src/EntityFrameworkCore.Testing.Common/ExceptionMessages.Designer.cs
  class ExceptionMessages (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method ExceptionMessages (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: src/EntityFrameworkCore.Testing.Common/Helpers/BaseMockedDbContextBuilder.cs
  class BaseMockedDbContextBuilder (line 10) | public abstract class BaseMockedDbContextBuilder<TDbContext> : IMockedDb...
    method UseConstructorWithParameters (line 30) | public IMockedDbContextBuilder<TDbContext> UseConstructorWithParameter...
    method UseDbContext (line 40) | public IMockedDbContextBuilder<TDbContext> UseDbContext(TDbContext dbC...

FILE: src/EntityFrameworkCore.Testing.Common/Helpers/BaseMockedDbContextFactory.cs
  class BaseMockedDbContextFactory (line 15) | public abstract class BaseMockedDbContextFactory<TDbContext> where TDbCo...
    method BaseMockedDbContextFactory (line 37) | protected BaseMockedDbContextFactory(MockedDbContextFactoryOptions<TDb...
    method Create (line 78) | public abstract TDbContext Create();

FILE: src/EntityFrameworkCore.Testing.Common/Helpers/ExpressionHelper.cs
  class ExpressionHelper (line 15) | public static class ExpressionHelper
    method CreatePropertyExpression (line 26) | public static Expression<Func<TParameter, TProperty>> CreatePropertyEx...
    method SqlAndParametersMatchFromSqlExpression (line 34) | public static bool SqlAndParametersMatchFromSqlExpression(string sql, ...
    method SqlMatchesFromSqlExpression (line 47) | private static bool SqlMatchesFromSqlExpression(string sql, FromSqlQue...
    method StringifyFromSqlExpression (line 64) | public static string StringifyFromSqlExpression(FromSqlQueryRootExpres...
    method ThrowIfExpressionIsNotSupported (line 77) | public static void ThrowIfExpressionIsNotSupported(Expression expression)

FILE: src/EntityFrameworkCore.Testing.Common/Helpers/IMockedDbContextBuilder.cs
  type IMockedDbContextBuilder (line 9) | public interface IMockedDbContextBuilder<TDbContext> where TDbContext : ...
    method UseConstructorWithParameters (line 24) | IMockedDbContextBuilder<TDbContext> UseConstructorWithParameters(param...
    method UseDbContext (line 29) | IMockedDbContextBuilder<TDbContext> UseDbContext(TDbContext dbContext);

FILE: src/EntityFrameworkCore.Testing.Common/Helpers/MockedDbContextFactoryOptions.cs
  class MockedDbContextFactoryOptions (line 10) | public class MockedDbContextFactoryOptions<TDbContext> where TDbContext ...

FILE: src/EntityFrameworkCore.Testing.Common/Helpers/ParameterMatchingHelper.cs
  class ParameterMatchingHelper (line 15) | public class ParameterMatchingHelper
    method DoInvocationParametersMatchSetUpParameters (line 31) | public static bool DoInvocationParametersMatchSetUpParameters(IEnumera...
    method DoesInvocationParameterValueMatchSetUpParameterValue (line 73) | private static bool DoesInvocationParameterValueMatchSetUpParameterVal...
    method DoesInvocationParameterMatchSetUpParameter (line 95) | private static bool DoesInvocationParameterMatchSetUpParameter(IDataPa...
    method StringifyParameters (line 113) | public static string StringifyParameters(IEnumerable<object> invocatio...

FILE: src/EntityFrameworkCore.Testing.Common/QueryRootExpression.cs
  class FakeQueryRootExpression (line 8) | public class FakeQueryRootExpression : EntityQueryRootExpression
    method FakeQueryRootExpression (line 10) | public FakeQueryRootExpression(IAsyncQueryProvider asyncQueryProvider,...

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/BaseForDbContextTests.cs
  class BaseForDbContextTests (line 8) | public abstract class BaseForDbContextTests<T> : Common.Tests.BaseForDbC...
    method AddExecuteSqlInterpolatedResult (line 10) | public override void AddExecuteSqlInterpolatedResult(T mockedDbContext...
    method AddExecuteSqlInterpolatedResult (line 15) | public override void AddExecuteSqlInterpolatedResult(T mockedDbContext...
    method AddExecuteSqlInterpolatedResult (line 20) | public override void AddExecuteSqlInterpolatedResult(T mockedDbContext...
    method AddExecuteSqlRawResult (line 25) | public override void AddExecuteSqlRawResult(T mockedDbContext, int exp...
    method AddExecuteSqlRawResult (line 30) | public override void AddExecuteSqlRawResult(T mockedDbContext, string ...
    method AddExecuteSqlRawResult (line 35) | public override void AddExecuteSqlRawResult(T mockedDbContext, string ...

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/BaseForDbQueryTests.cs
  class BaseForDbQueryTests (line 10) | public abstract class BaseForDbQueryTests<T> : BaseForReadOnlyDbSetTests...
    method SetUp (line 14) | [SetUp]
    method AddFromSqlRawResult (line 22) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, IEnu...
    method AddFromSqlRawResult (line 27) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlRawResult (line 32) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlInterpolatedResult (line 37) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 42) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 47) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddToReadOnlySource (line 52) | protected override void AddToReadOnlySource(DbSet<T> mockedDbQuery, T ...
    method AddRangeToReadOnlySource (line 57) | protected override void AddRangeToReadOnlySource(DbSet<T> mockedDbQuer...
    method ClearReadOnlySource (line 62) | protected override void ClearReadOnlySource(DbSet<T> mockedDbQuery)

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/BaseForDbSetTests.cs
  class BaseForDbSetTests (line 9) | public abstract class BaseForDbSetTests<T> : BaseForDbSetTests<TestDbCon...
    method CreateMockedDbContext (line 11) | protected override TestDbContext CreateMockedDbContext()
    method AddFromSqlRawResult (line 16) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, IEnu...
    method AddFromSqlRawResult (line 21) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlRawResult (line 26) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlInterpolatedResult (line 31) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 36) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 41) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/ByPropertyDbSetTests.cs
  class ByPropertyDbSetTests (line 6) | public class ByPropertyDbSetTests : BaseForDbSetTests<TestEntity>

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/ByPropertyReadOnlyDbSetExceptionTests.cs
  class ByPropertyReadOnlyDbSetExceptionTests (line 7) | public class ByPropertyReadOnlyDbSetExceptionTests : ReadOnlyDbSetExcept...
    method SetUp (line 13) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/ByPropertyReadOnlyDbSetTests.cs
  class ByPropertyReadOnlyDbSetTests (line 6) | public class ByPropertyReadOnlyDbSetTests : BaseForDbQueryTests<TestRead...

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/ByTypeDbSetTests.cs
  class ByTypeDbSetTests (line 9) | public class ByTypeDbSetTests : BaseForDbSetTests<TestEntity>
    method Select_ReturnsSequence (line 13) | [Test(Description = "This test ensures that method invoked via CallBas...

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/ByTypeReadOnlyDbSetExceptionTests.cs
  class ByTypeReadOnlyDbSetExceptionTests (line 7) | public class ByTypeReadOnlyDbSetExceptionTests : ReadOnlyDbSetExceptionT...
    method SetUp (line 13) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/ByTypeReadOnlyDbSetTests.cs
  class ByTypeReadOnlyDbSetTests (line 6) | public class ByTypeReadOnlyDbSetTests : BaseForDbQueryTests<TestReadOnly...

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/CreateFactoryTests.cs
  class CreateFactoryTests (line 10) | public class CreateFactoryTests : BaseForTests
    method CreateMockedDbContextFor_Type_CreatesMockedDbContext (line 12) | [Test]
    method CreateMockedQueryProviderFor_Queryable_CreatesMockedQueryProvider (line 24) | [Test]
    method CreateMockedQueryProviderFor_NullQueryable_ThrowsException (line 38) | [Test]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/DbContextTestsUsingConstructorParameters.cs
  class DbContextTestsUsingConstructorParameters (line 8) | public class DbContextTestsUsingConstructorParameters : BaseForDbContext...
    method SetUp (line 10) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/DbContextTestsUsingType.cs
  class DbContextTestsUsingType (line 6) | public class DbContextTestsUsingType : BaseForDbContextTests<TestDbContext>
    method SetUp (line 8) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue114Tests.cs
  class Issue114Tests (line 3) | public class Issue114Tests : Common.Tests.Issue114Tests
    method MockedDbContextFactory (line 5) | protected override TestDbContext MockedDbContextFactory()

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue117Tests.cs
  class Issue117Tests (line 3) | public class Issue117Tests : Common.Tests.Issue117Tests
    method MockedDbContextFactory (line 5) | protected override TestDbContext MockedDbContextFactory()

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue126Tests.cs
  class Issue126Tests (line 8) | public class Issue126Tests : Issue126Tests<TestDbContext>
    method SetUp (line 10) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue1Tests.cs
  class Issue1Tests (line 15) | public class Issue1Tests : BaseForTests
    method CreateMockedDbContextFor_ParametersForSpecificConstructor_CreatesSubstitute (line 17) | [Test]
    method ExecuteSqlRawAsync_SpecifiedSqlAndSqlParameter_ReturnsExpectedResultAndSetsOutputParameterValue (line 31) | [Test]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue49Tests.cs
  class Issue49Tests (line 6) | public class Issue49Tests : Issue49Tests<TestDbContext, TestEntity>
    method SetUp (line 8) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue4Tests.cs
  class Issue4Tests (line 12) | public class Issue4Tests : BaseForTests
    method AsQueryable_Set_ReturnsIQueryableOfTWithMockedQueryProvider (line 14) | [Test]
    method AsQueryableThenWhereThenSingleOrDefaultAsync_WhereOperationReturnsFalse_ReturnsDefault (line 25) | [Test]
    method AsQueryableThenWhereThenSingleOrDefaultAsync_WhereOperationReturnsTrue_ReturnsSingleEntity (line 39) | [Test]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue6Tests.cs
  class Issue6Tests (line 11) | public class Issue6Tests : BaseForTests
    method FromSqlInterpolated_SpecifiedSqlWithNullParameters_ReturnsExpectedResult (line 22) | [TestCaseSource(nameof(FromSqlInterpolated_SpecifiedSqlWithNullParamet...
    method FromSqlInterpolated_SpecifiedSqlWithDbNullParameters_ReturnsExpectedResult (line 35) | [Test]

FILE: src/EntityFrameworkCore.Testing.Moq.Tests/Issue88Tests.cs
  class Issue88Tests (line 8) | public class Issue88Tests : Issue88Tests<TestDbContext, TestEntity>
    method SetUp (line 10) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.Moq/Create.cs
  class Create (line 12) | public static class Create
    method MockedDbContextFor (line 27) | public static TDbContext MockedDbContextFor<TDbContext>(params object[...
    method MockedQueryProviderFor (line 40) | public static IQueryProvider MockedQueryProviderFor<T>(IQueryable<T> q...

FILE: src/EntityFrameworkCore.Testing.Moq/Extensions/DbContextExtensions.cs
  class DbContextExtensions (line 21) | public static class DbContextExtensions
    method AddExecuteSqlInterpolatedResult (line 33) | public static TDbContext AddExecuteSqlInterpolatedResult<TDbContext>(
    method AddExecuteSqlInterpolatedResult (line 49) | public static TDbContext AddExecuteSqlInterpolatedResult<TDbContext>(
    method AddExecuteSqlInterpolatedResult (line 67) | public static TDbContext AddExecuteSqlInterpolatedResult<TDbContext>(
    method AddExecuteSqlRawResult (line 83) | public static TDbContext AddExecuteSqlRawResult<TDbContext>(this TDbCo...
    method AddExecuteSqlRawResult (line 99) | public static TDbContext AddExecuteSqlRawResult<TDbContext>(
    method AddExecuteSqlRawResult (line 116) | public static TDbContext AddExecuteSqlRawResult<TDbContext>(

FILE: src/EntityFrameworkCore.Testing.Moq/Extensions/DbSetExtensions.Internal.cs
  class DbSetExtensions (line 17) | public static class DbSetExtensions
    method CreateMockedDbSet (line 19) | internal static DbSet<TEntity> CreateMockedDbSet<TEntity>(this DbSet<T...

FILE: src/EntityFrameworkCore.Testing.Moq/Extensions/QueryProviderExtensions.Internal.cs
  class QueryProviderExtensions (line 9) | public static partial class QueryProviderExtensions
    method CreateMockedQueryProvider (line 11) | internal static IQueryProvider CreateMockedQueryProvider<T>(this IQuer...
    method SetSource (line 21) | internal static void SetSource<T>(this AsyncQueryProvider<T> mockedQue...

FILE: src/EntityFrameworkCore.Testing.Moq/Extensions/QueryProviderExtensions.cs
  class QueryProviderExtensions (line 17) | public static partial class QueryProviderExtensions
    method AddFromSqlInterpolatedResult (line 28) | public static IQueryProvider AddFromSqlInterpolatedResult<T>(this IQue...
    method AddFromSqlInterpolatedResult (line 43) | public static IQueryProvider AddFromSqlInterpolatedResult<T>(this IQue...
    method AddFromSqlInterpolatedResult (line 60) | public static IQueryProvider AddFromSqlInterpolatedResult<T>(
    method AddFromSqlRawResult (line 75) | public static IQueryProvider AddFromSqlRawResult<T>(this IQueryProvide...
    method AddFromSqlRawResult (line 90) | public static IQueryProvider AddFromSqlRawResult<T>(this IQueryProvide...
    method AddFromSqlRawResult (line 106) | public static IQueryProvider AddFromSqlRawResult<T>(this IQueryProvide...

FILE: src/EntityFrameworkCore.Testing.Moq/Extensions/QueryableExtensions.cs
  class QueryableExtensions (line 11) | public static class QueryableExtensions
    method AddFromSqlInterpolatedResult (line 20) | public static IQueryable<T> AddFromSqlInterpolatedResult<T>(this IQuer...
    method AddFromSqlInterpolatedResult (line 35) | public static IQueryable<T> AddFromSqlInterpolatedResult<T>(this IQuer...
    method AddFromSqlInterpolatedResult (line 52) | public static IQueryable<T> AddFromSqlInterpolatedResult<T>(
    method AddFromSqlRawResult (line 67) | public static IQueryable<T> AddFromSqlRawResult<T>(this IQueryable<T> ...
    method AddFromSqlRawResult (line 82) | public static IQueryable<T> AddFromSqlRawResult<T>(this IQueryable<T> ...
    method AddFromSqlRawResult (line 98) | public static IQueryable<T> AddFromSqlRawResult<T>(this IQueryable<T> ...

FILE: src/EntityFrameworkCore.Testing.Moq/Extensions/ReadOnlyDbSetExtensions.Internal.cs
  class ReadOnlyDbSetExtensions (line 16) | public static partial class ReadOnlyDbSetExtensions
    method CreateMockedReadOnlyDbSet (line 18) | internal static DbSet<TEntity> CreateMockedReadOnlyDbSet<TEntity>(this...
    method SetSource (line 81) | internal static void SetSource<TEntity>(this DbSet<TEntity> mockedRead...

FILE: src/EntityFrameworkCore.Testing.Moq/Extensions/ReadOnlyDbSetExtensions.cs
  class ReadOnlyDbSetExtensions (line 11) | public static partial class ReadOnlyDbSetExtensions
    method AddToReadOnlySource (line 19) | public static void AddToReadOnlySource<TEntity>(this DbSet<TEntity> mo...
    method AddRangeToReadOnlySource (line 36) | public static void AddRangeToReadOnlySource<TEntity>(this DbSet<TEntit...
    method ClearReadOnlySource (line 52) | public static void ClearReadOnlySource<TEntity>(this DbSet<TEntity> mo...

FILE: src/EntityFrameworkCore.Testing.Moq/Helpers/MockedDbContextBuilder.cs
  class MockedDbContextBuilder (line 10) | public class MockedDbContextBuilder<TDbContext> : BaseMockedDbContextBui...

FILE: src/EntityFrameworkCore.Testing.Moq/Helpers/MockedDbContextFactory.Internal.cs
  class MockedDbContextFactory (line 18) | internal class MockedDbContextFactory<TDbContext> : BaseMockedDbContextF...
    method MockedDbContextFactory (line 20) | public MockedDbContextFactory(MockedDbContextFactoryOptions<TDbContext...
    method Create (line 22) | public override TDbContext Create()

FILE: src/EntityFrameworkCore.Testing.Moq/Helpers/NoSetUpDefaultValueProvider.cs
  class NoSetUpDefaultValueProvider (line 18) | internal class NoSetUpDefaultValueProvider<TDbContext> : DefaultValuePro...
    method NoSetUpDefaultValueProvider (line 28) | public NoSetUpDefaultValueProvider(TDbContext dbContext)
    method GetDefaultValue (line 38) | protected override object GetDefaultValue(Type type, Mock mock)
    method GetModelType (line 68) | private Type GetModelType(MethodInfo invokedMethod)
    method SetUpModel (line 92) | private void SetUpModel<TEntity>(Mock<TDbContext> dbContextMock) where...
    method SetUpReadOnlyModel (line 129) | private void SetUpReadOnlyModel<TEntity>(Mock<TDbContext> dbContextMoc...

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/BaseForDbContextTests.cs
  class BaseForDbContextTests (line 8) | public abstract class BaseForDbContextTests<T> : Common.Tests.BaseForDbC...
    method AddExecuteSqlInterpolatedResult (line 10) | public override void AddExecuteSqlInterpolatedResult(T mockedDbContext...
    method AddExecuteSqlInterpolatedResult (line 15) | public override void AddExecuteSqlInterpolatedResult(T mockedDbContext...
    method AddExecuteSqlInterpolatedResult (line 20) | public override void AddExecuteSqlInterpolatedResult(T mockedDbContext...
    method AddExecuteSqlRawResult (line 25) | public override void AddExecuteSqlRawResult(T mockedDbContext, int exp...
    method AddExecuteSqlRawResult (line 30) | public override void AddExecuteSqlRawResult(T mockedDbContext, string ...
    method AddExecuteSqlRawResult (line 35) | public override void AddExecuteSqlRawResult(T mockedDbContext, string ...

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/BaseForDbQueryTests.cs
  class BaseForDbQueryTests (line 10) | public abstract class BaseForDbQueryTests<T> : BaseForReadOnlyDbSetTests...
    method SetUp (line 14) | [SetUp]
    method AddFromSqlRawResult (line 22) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, IEnu...
    method AddFromSqlRawResult (line 27) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlRawResult (line 32) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlInterpolatedResult (line 37) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 42) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 47) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddToReadOnlySource (line 52) | protected override void AddToReadOnlySource(DbSet<T> mockedDbQuery, T ...
    method AddRangeToReadOnlySource (line 57) | protected override void AddRangeToReadOnlySource(DbSet<T> mockedDbQuer...
    method ClearReadOnlySource (line 62) | protected override void ClearReadOnlySource(DbSet<T> mockedDbQuery)

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/BaseForDbSetTests.cs
  class BaseForDbSetTests (line 9) | public abstract class BaseForDbSetTests<T> : BaseForDbSetTests<TestDbCon...
    method CreateMockedDbContext (line 11) | protected override TestDbContext CreateMockedDbContext()
    method AddFromSqlRawResult (line 16) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, IEnu...
    method AddFromSqlRawResult (line 21) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlRawResult (line 26) | protected override void AddFromSqlRawResult(DbSet<T> mockedDbSet, stri...
    method AddFromSqlInterpolatedResult (line 31) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 36) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...
    method AddFromSqlInterpolatedResult (line 41) | protected override void AddFromSqlInterpolatedResult(DbSet<T> mockedDb...

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByPropertyDbSetTests.cs
  class ByPropertyDbSetTests (line 6) | public class ByPropertyDbSetTests : BaseForDbSetTests<TestEntity>

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByPropertyReadOnlyDbSetExceptionTests.cs
  class ByPropertyReadOnlyDbSetExceptionTests (line 7) | public class ByPropertyReadOnlyDbSetExceptionTests : ReadOnlyDbSetExcept...
    method SetUp (line 13) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByPropertyReadOnlyDbSetTests.cs
  class ByPropertyReadOnlyDbSetTests (line 6) | public class ByPropertyReadOnlyDbSetTests : BaseForDbQueryTests<TestRead...

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByTypeDbSetTests.cs
  class ByTypeDbSetTests (line 9) | public class ByTypeDbSetTests : BaseForDbSetTests<TestEntity>
    method Select_ReturnsSequence (line 13) | [Test(Description = "This test ensures that method invoked via CallBas...

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByTypeReadOnlyDbSetExceptionTests.cs
  class ByTypeReadOnlyDbSetExceptionTests (line 7) | public class ByTypeReadOnlyDbSetExceptionTests : ReadOnlyDbSetExceptionT...
    method SetUp (line 13) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByTypeReadOnlyDbSetTests.cs
  class ByTypeReadOnlyDbSetTests (line 6) | public class ByTypeReadOnlyDbSetTests : BaseForDbQueryTests<TestReadOnly...

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/CreateFactoryTests.cs
  class CreateFactoryTests (line 10) | public class CreateFactoryTests : BaseForTests
    method CreateMockedDbContextFor_Type_CreatesMockedDbContext (line 12) | [Test]
    method CreateMockedQueryProviderFor_Queryable_CreatesMockedQueryProvider (line 24) | [Test]
    method CreateMockedQueryProviderFor_NullQueryable_ThrowsException (line 38) | [Test]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/DbContextTestsUsingConstructorParameters.cs
  class DbContextTestsUsingConstructorParameters (line 8) | public class DbContextTestsUsingConstructorParameters : BaseForDbContext...
    method SetUp (line 10) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/DbContextTestsUsingType.cs
  class DbContextTestsUsingType (line 6) | public class DbContextTestsUsingType : BaseForDbContextTests<TestDbContext>
    method SetUp (line 8) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue114Tests.cs
  class Issue114Tests (line 3) | public class Issue114Tests : Common.Tests.Issue114Tests
    method MockedDbContextFactory (line 5) | protected override TestDbContext MockedDbContextFactory()

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue117Tests.cs
  class Issue117Tests (line 3) | public class Issue117Tests : Common.Tests.Issue117Tests
    method MockedDbContextFactory (line 5) | protected override TestDbContext MockedDbContextFactory()

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue126Tests.cs
  class Issue126Tests (line 8) | public class Issue126Tests : Issue126Tests<TestDbContext>
    method SetUp (line 10) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue1Tests.cs
  class Issue1Tests (line 15) | public class Issue1Tests : BaseForTests
    method CreateMockedDbContextFor_ParametersForSpecificConstructor_CreatesSubstitute (line 17) | [Test]
    method ExecuteSqlRawAsync_SpecifiedSqlAndSqlParameter_ReturnsExpectedResultAndSetsOutputParameterValue (line 31) | [Test]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue49Tests.cs
  class Issue49Tests (line 6) | public class Issue49Tests : Issue49Tests<TestDbContext, TestEntity>
    method SetUp (line 8) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue4Tests.cs
  class Issue4Tests (line 12) | public class Issue4Tests : BaseForTests
    method AsQueryable_Set_ReturnsIQueryableOfTWithMockedQueryProvider (line 14) | [Test]
    method AsQueryableThenWhereThenSingleOrDefaultAsync_WhereOperationReturnsFalse_ReturnsDefault (line 25) | [Test]
    method AsQueryableThenWhereThenSingleOrDefaultAsync_WhereOperationReturnsTrue_ReturnsSingleEntity (line 39) | [Test]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue6Tests.cs
  class Issue6Tests (line 11) | public class Issue6Tests : BaseForTests
    method FromSqlInterpolated_SpecifiedSqlWithNullParameters_ReturnsExpectedResult (line 22) | [TestCaseSource(nameof(FromSqlInterpolated_SpecifiedSqlWithNullParamet...
    method FromSqlInterpolated_SpecifiedSqlWithDbNullParameters_ReturnsExpectedResult (line 35) | [Test]

FILE: src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue88Tests.cs
  class Issue88Tests (line 8) | public class Issue88Tests : Issue88Tests<TestDbContext, TestEntity>
    method SetUp (line 10) | [SetUp]

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Create.cs
  class Create (line 12) | public static class Create
    method MockedDbContextFor (line 27) | public static TDbContext MockedDbContextFor<TDbContext>(params object[...
    method MockedQueryProviderFor (line 40) | public static IQueryProvider MockedQueryProviderFor<T>(IQueryable<T> q...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Extensions/DbContextExtensions.cs
  class DbContextExtensions (line 21) | public static class DbContextExtensions
    method AddExecuteSqlInterpolatedResult (line 33) | public static TDbContext AddExecuteSqlInterpolatedResult<TDbContext>(
    method AddExecuteSqlInterpolatedResult (line 49) | public static TDbContext AddExecuteSqlInterpolatedResult<TDbContext>(
    method AddExecuteSqlInterpolatedResult (line 67) | public static TDbContext AddExecuteSqlInterpolatedResult<TDbContext>(
    method AddExecuteSqlRawResult (line 83) | public static TDbContext AddExecuteSqlRawResult<TDbContext>(this TDbCo...
    method AddExecuteSqlRawResult (line 99) | public static TDbContext AddExecuteSqlRawResult<TDbContext>(
    method AddExecuteSqlRawResult (line 116) | public static TDbContext AddExecuteSqlRawResult<TDbContext>(

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Extensions/DbSetExtensions.Internal.cs
  class DbSetExtensions (line 17) | public static class DbSetExtensions
    method CreateMockedDbSet (line 19) | internal static DbSet<TEntity> CreateMockedDbSet<TEntity>(this DbSet<T...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Extensions/QueryProviderExtensions.Internal.cs
  class QueryProviderExtensions (line 10) | public static partial class QueryProviderExtensions
    method CreateMockedQueryProvider (line 12) | internal static IQueryProvider CreateMockedQueryProvider<T>(this IQuer...
    method SetSource (line 21) | internal static void SetSource<T>(this AsyncQueryProvider<T> mockedQue...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Extensions/QueryProviderExtensions.cs
  class QueryProviderExtensions (line 18) | public static partial class QueryProviderExtensions
    method AddFromSqlInterpolatedResult (line 29) | public static IQueryProvider AddFromSqlInterpolatedResult<T>(this IQue...
    method AddFromSqlInterpolatedResult (line 44) | public static IQueryProvider AddFromSqlInterpolatedResult<T>(this IQue...
    method AddFromSqlInterpolatedResult (line 61) | public static IQueryProvider AddFromSqlInterpolatedResult<T>(
    method AddFromSqlRawResult (line 76) | public static IQueryProvider AddFromSqlRawResult<T>(this IQueryProvide...
    method AddFromSqlRawResult (line 91) | public static IQueryProvider AddFromSqlRawResult<T>(this IQueryProvide...
    method AddFromSqlRawResult (line 107) | public static IQueryProvider AddFromSqlRawResult<T>(this IQueryProvide...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Extensions/QueryableExtensions.cs
  class QueryableExtensions (line 11) | public static class QueryableExtensions
    method AddFromSqlInterpolatedResult (line 20) | public static IQueryable<T> AddFromSqlInterpolatedResult<T>(this IQuer...
    method AddFromSqlInterpolatedResult (line 35) | public static IQueryable<T> AddFromSqlInterpolatedResult<T>(this IQuer...
    method AddFromSqlInterpolatedResult (line 52) | public static IQueryable<T> AddFromSqlInterpolatedResult<T>(
    method AddFromSqlRawResult (line 67) | public static IQueryable<T> AddFromSqlRawResult<T>(this IQueryable<T> ...
    method AddFromSqlRawResult (line 82) | public static IQueryable<T> AddFromSqlRawResult<T>(this IQueryable<T> ...
    method AddFromSqlRawResult (line 98) | public static IQueryable<T> AddFromSqlRawResult<T>(this IQueryable<T> ...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Extensions/ReadOnlyDbSetExtensions.Internal.cs
  class ReadOnlyDbSetExtensions (line 17) | public static partial class ReadOnlyDbSetExtensions
    method CreateMockedReadOnlyDbSet (line 19) | internal static DbSet<TEntity> CreateMockedReadOnlyDbSet<TEntity>(this...
    method SetSource (line 89) | internal static void SetSource<TEntity>(this DbSet<TEntity> mockedRead...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Extensions/ReadOnlyDbSetExtensions.cs
  class ReadOnlyDbSetExtensions (line 11) | public static partial class ReadOnlyDbSetExtensions
    method AddToReadOnlySource (line 19) | public static void AddToReadOnlySource<TEntity>(this DbSet<TEntity> mo...
    method AddRangeToReadOnlySource (line 36) | public static void AddRangeToReadOnlySource<TEntity>(this DbSet<TEntit...
    method ClearReadOnlySource (line 52) | public static void ClearReadOnlySource<TEntity>(this DbSet<TEntity> mo...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Helpers/MockedDbContextBuilder.cs
  class MockedDbContextBuilder (line 10) | public class MockedDbContextBuilder<TDbContext> : BaseMockedDbContextBui...

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Helpers/MockedDbContextFactory.Internal.cs
  class MockedDbContextFactory (line 26) | internal class MockedDbContextFactory<TDbContext> : BaseMockedDbContextF...
    method MockedDbContextFactory (line 28) | public MockedDbContextFactory(MockedDbContextFactoryOptions<TDbContext...
    method Create (line 30) | public override TDbContext Create()

FILE: src/EntityFrameworkCore.Testing.NSubstitute/Helpers/NoSetUpHandler.cs
  class NoSetUpHandler (line 19) | internal class NoSetUpHandler<TDbContext> : ICallHandler where TDbContex...
    method NoSetUpHandler (line 29) | public NoSetUpHandler(TDbContext dbContext)
    method Handle (line 39) | public RouteAction Handle(ICall call)
    method GetModelType (line 68) | private Type GetModelType(MethodInfo invokedMethod)
    method SetUpModel (line 92) | private void SetUpModel<TEntity>(TDbContext mockedDbContext) where TEn...
    method SetUpReadOnlyModel (line 128) | private void SetUpReadOnlyModel<TEntity>(TDbContext mockedDbContext) w...
Condensed preview — 122 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (433K chars).
[
  {
    "path": ".github/workflows/continuous-integration-checks.yml",
    "chars": 2234,
    "preview": "name: Continuous Integration Checks\n\non:\n  push:\n  schedule:\n    - cron: \"0 9 * * 3\"\n\njobs:\n  build-and-test:\n    name: "
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 1184,
    "preview": "name: Release\n\non:\n  release:\n    types: [published]\n\njobs:\n  build-and-test:\n    name: Build, pack and push\n    runs-on"
  },
  {
    "path": ".gitignore",
    "chars": 5582,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "EntityFrameworkCore.Testing.Moq.nuspec",
    "chars": 2726,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd\">\n  <me"
  },
  {
    "path": "EntityFrameworkCore.Testing.NSubstitute.nuspec",
    "chars": 2803,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd\">\n  <me"
  },
  {
    "path": "EntityFrameworkCore.Testing.sln",
    "chars": 6305,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.3.3281"
  },
  {
    "path": "LICENSE",
    "chars": 1069,
    "preview": "MIT License\n\nCopyright (c) 2025 Lee Anderson\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
  },
  {
    "path": "README.md",
    "chars": 14877,
    "preview": "# EntityFrameworkCore.Testing\n\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/6d641ce391264f45b99acee8694a8"
  },
  {
    "path": "TODO.md",
    "chars": 196,
    "preview": "# TODO\n\n- Add tests for untested functionality\n- Remove repeated set up code\n- Unify test structures to assist with cros"
  },
  {
    "path": "googlea6bd68d4a55b1e59.html",
    "chars": 53,
    "preview": "google-site-verification: googlea6bd68d4a55b1e59.html"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeDbSetTests.cs",
    "chars": 2657,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing AutoFixture;\nusi"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeReadOnlyDbSetExceptionTests.cs",
    "chars": 675,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/ByTypeReadOnlyDbSetTests.cs",
    "chars": 1315,
    "preview": "using System;\nusing System.ComponentModel;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFramew"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/DbContextTests.cs",
    "chars": 2099,
    "preview": "using System;\nusing System.Linq;\nusing EntityFrameworkCore.Testing.Common;\nusing EntityFrameworkCore.Testing.Common.Tes"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/EntityFrameworkCore.DefaultBehaviour.Tests.csproj",
    "chars": 1019,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <IsPackable>fals"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue114Tests.cs",
    "chars": 414,
    "preview": "using System;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace EntityFrameworkCore.DefaultBehaviour.Tests\n{\n    public c"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue117Tests.cs",
    "chars": 414,
    "preview": "using System;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace EntityFrameworkCore.DefaultBehaviour.Tests\n{\n    public c"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue49Tests.cs",
    "chars": 508,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.DefaultBehaviour.Tests/Issue88Tests.cs",
    "chars": 733,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.Enti"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/AsyncEnumerable.cs",
    "chars": 1328,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressi"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/AsyncEnumerator.cs",
    "chars": 623,
    "preview": "using System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace EntityFrameworkCore.Testing.Common\n{\n    pub"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/AsyncQueryProvider.cs",
    "chars": 5590,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflecti"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/EntityFrameworkCore.Testing.Common.csproj",
    "chars": 1470,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>rgvlee<"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/EntityFrameworkCore.Testing.Common.xml",
    "chars": 11448,
    "preview": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>EntityFrameworkCore.Testing.Common</name>\n    </assembly>\n    <"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/ExceptionMessages.Designer.cs",
    "chars": 3749,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/ExceptionMessages.resx",
    "chars": 6149,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/Helpers/BaseMockedDbContextBuilder.cs",
    "chars": 1927,
    "preview": "using Microsoft.EntityFrameworkCore;\nusing rgvlee.Core.Common.Helpers;\n\nnamespace EntityFrameworkCore.Testing.Common.He"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/Helpers/BaseMockedDbContextFactory.cs",
    "chars": 3355,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/Helpers/ExpressionHelper.cs",
    "chars": 4785,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflectio"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/Helpers/IMockedDbContextBuilder.cs",
    "chars": 1282,
    "preview": "using Microsoft.EntityFrameworkCore;\n\nnamespace EntityFrameworkCore.Testing.Common.Helpers\n{\n    /// <summary>\n    /// "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/Helpers/MockedDbContextFactoryOptions.cs",
    "chars": 949,
    "preview": "using System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace EntityFrameworkCore.Testing.Common.He"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/Helpers/ParameterMatchingHelper.cs",
    "chars": 6640,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Data.Common;\nusing System.Linq;\nusing S"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common/QueryRootExpression.cs",
    "chars": 543,
    "preview": "using System;\nusing System.Linq;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Quer"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/AsyncEnumerableTests.cs",
    "chars": 911,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing AutoFixture;\nusing NUnit.Framework;\n\nnamespace"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/BaseForDbContextTests.cs",
    "chars": 21028,
    "preview": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Data.SqlClient;\nusing System.Linq;\nusing System.Threadi"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/BaseForDbSetTests.cs",
    "chars": 6096,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing AutoFixture;\nusi"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/BaseForMockedQueryableTests.cs",
    "chars": 14114,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing Microsoft.Data.SqlClient;\nusing Syst"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/BaseForQueryableTests.cs",
    "chars": 34069,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/BaseForReadOnlyDbSetTests.cs",
    "chars": 6634,
    "preview": "using System;\nusing System.Collections.Generic;\nusing Microsoft.Data.SqlClient;\nusing System.Linq;\nusing System.Threadi"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/BaseForTests.cs",
    "chars": 624,
    "preview": "using AutoFixture;\nusing Microsoft.Extensions.Logging;\nusing NUnit.Framework;\nusing rgvlee.Core.Common.Helpers;\n\nnamesp"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/BaseTestEntity.cs",
    "chars": 450,
    "preview": "using System;\n\nnamespace EntityFrameworkCore.Testing.Common.Tests\n{\n    public abstract class BaseTestEntity\n    {\n    "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/EntityFrameworkCore.Testing.Common.Tests.csproj",
    "chars": 1903,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <IsPackable>fals"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/Issue114Tests.cs",
    "chars": 941,
    "preview": "using System.Linq;\nusing FluentAssertions;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framework;\n\nnamespace Entit"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/Issue117Tests.cs",
    "chars": 1978,
    "preview": "using System.Linq;\nusing AutoFixture;\nusing FluentAssertions;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/Issue126Tests.cs",
    "chars": 1018,
    "preview": "using System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FluentAssertions;\nusing Microsoft.EntityFrame"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/Issue49Tests.cs",
    "chars": 1190,
    "preview": "using AutoFixture;\nusing FluentAssertions;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framework;\n\nnamespace Entit"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/Issue88Tests.cs",
    "chars": 2068,
    "preview": "using System;\nusing System.Linq;\nusing AutoFixture;\nusing FluentAssertions;\nusing Microsoft.EntityFrameworkCore;\nusing "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/MappingProfile.cs",
    "chars": 293,
    "preview": "using AutoMapper;\n\nnamespace EntityFrameworkCore.Testing.Common.Tests\n{\n    public class MappingProfile : Profile\n    {"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/NotRegisteredEntity.cs",
    "chars": 113,
    "preview": "namespace EntityFrameworkCore.Testing.Common.Tests\n{\n    public class NotRegisteredEntity : BaseTestEntity { }\n}"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/ReadOnlyDbSetExceptionTests.cs",
    "chars": 6906,
    "preview": "using System;\nusing AutoFixture;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framework;\n\nnamespace EntityFramework"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/TestDbContext.cs",
    "chars": 1127,
    "preview": "using Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Logging;\nusing rgvlee.Core.Common.Helpers;\n\nnamespace E"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/TestEntity.cs",
    "chars": 104,
    "preview": "namespace EntityFrameworkCore.Testing.Common.Tests\n{\n    public class TestEntity : BaseTestEntity { }\n}"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/TestReadOnlyEntity.cs",
    "chars": 112,
    "preview": "namespace EntityFrameworkCore.Testing.Common.Tests\n{\n    public class TestReadOnlyEntity : BaseTestEntity { }\n}"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Common.Tests/TestViewModel.cs",
    "chars": 196,
    "preview": "using System;\n\nnamespace EntityFrameworkCore.Testing.Common.Tests\n{\n    public class TestViewModel\n    {\n        public"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Create.cs",
    "chars": 2135,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.Moq.Extensions;\nusing EntityFrameworkCore.Testing.Moq.Helpers;\nusin"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/EntityFrameworkCore.Testing.Moq.csproj",
    "chars": 879,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>rgvlee<"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/EntityFrameworkCore.Testing.Moq.xml",
    "chars": 20350,
    "preview": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>EntityFrameworkCore.Testing.Moq</name>\n    </assembly>\n    <mem"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Extensions/DbContextExtensions.cs",
    "chars": 10307,
    "preview": "#pragma warning disable EF1001 // Internal EF Core API usage.\n\nusing System;\nusing System.Collections.Generic;\nusing Sy"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Extensions/DbSetExtensions.Internal.cs",
    "chars": 6109,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Lin"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Extensions/QueryProviderExtensions.Internal.cs",
    "chars": 1134,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing EntityFrameworkCore.Testing.Common;\nusing Moq;\nusing rgvlee."
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Extensions/QueryProviderExtensions.cs",
    "chars": 7957,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing EntityFramework"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Extensions/QueryableExtensions.cs",
    "chars": 6129,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing rgvlee.Core.Common.Helpers;\n\nnamespace EntityFr"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Extensions/ReadOnlyDbSetExtensions.Internal.cs",
    "chars": 7911,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Lin"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Extensions/ReadOnlyDbSetExtensions.cs",
    "chars": 2595,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.EntityFrameworkCore;\nusing rgvlee.Core.Common.Help"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Helpers/MockedDbContextBuilder.cs",
    "chars": 682,
    "preview": "using EntityFrameworkCore.Testing.Common.Helpers;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace EntityFrameworkCore.T"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Helpers/MockedDbContextFactory.Internal.cs",
    "chars": 12017,
    "preview": "#pragma warning disable EF1001 // Internal EF Core API usage.\n\nusing System;\nusing System.Collections.Generic;\nusing Sy"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq/Helpers/NoSetUpDefaultValueProvider.cs",
    "chars": 7051,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading;\nusi"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/BaseForDbContextTests.cs",
    "chars": 1611,
    "preview": "using System;\nusing System.Collections.Generic;\nusing EntityFrameworkCore.Testing.Moq.Extensions;\nusing Microsoft.Entit"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/BaseForDbQueryTests.cs",
    "chars": 2430,
    "preview": "using System;\nusing System.Collections.Generic;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing EntityFrameworkCo"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/BaseForDbSetTests.cs",
    "chars": 1849,
    "preview": "using System;\nusing System.Collections.Generic;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing EntityFrameworkCo"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/ByPropertyDbSetTests.cs",
    "chars": 295,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.Common.Tests;\n\nnamespace EntityFrameworkCore.Testing.Moq.Tests\n{\n "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/ByPropertyReadOnlyDbSetExceptionTests.cs",
    "chars": 603,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framework;\n\nnamespace "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/ByPropertyReadOnlyDbSetTests.cs",
    "chars": 334,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.Common.Tests;\n\nnamespace EntityFrameworkCore.Testing.Moq.Tests\n{\n "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/ByTypeDbSetTests.cs",
    "chars": 967,
    "preview": "using System.Linq;\nusing System.Linq.Expressions;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Moq;\nusing NUni"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/ByTypeReadOnlyDbSetExceptionTests.cs",
    "chars": 604,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framework;\n\nnamespace "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/ByTypeReadOnlyDbSetTests.cs",
    "chars": 330,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.Common.Tests;\n\nnamespace EntityFrameworkCore.Testing.Moq.Tests\n{\n "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/CreateFactoryTests.cs",
    "chars": 1481,
    "preview": "using System;\nusing System.Linq;\nusing Castle.DynamicProxy;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Micro"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/DbContextTestsUsingConstructorParameters.cs",
    "chars": 557,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/DbContextTestsUsingType.cs",
    "chars": 390,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing NUnit.Framework;\n\nnamespace EntityFrameworkCore.Testing.Moq.Tests"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/EntityFrameworkCore.Testing.Moq.Tests.csproj",
    "chars": 1361,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <IsPackable>fals"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue114Tests.cs",
    "chars": 273,
    "preview": "namespace EntityFrameworkCore.Testing.Moq.Tests\n{\n    public class Issue114Tests : Common.Tests.Issue114Tests\n    {\n   "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue117Tests.cs",
    "chars": 273,
    "preview": "namespace EntityFrameworkCore.Testing.Moq.Tests\n{\n    public class Issue117Tests : Common.Tests.Issue117Tests\n    {\n   "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue126Tests.cs",
    "chars": 599,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue1Tests.cs",
    "chars": 2032,
    "preview": "using System;\nusing System.Data;\nusing Microsoft.Data.SqlClient;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue49Tests.cs",
    "chars": 376,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing NUnit.Framework;\n\nnamespace EntityFrameworkCore.Testing.Moq.Tests"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue4Tests.cs",
    "chars": 2047,
    "preview": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing AutoFixture;\nusing EntityFrameworkCore.Testing.Com"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue6Tests.cs",
    "chars": 2255,
    "preview": "using System;\nusing System.Collections.Generic;\nusing AutoFixture;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusin"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.Moq.Tests/Issue88Tests.cs",
    "chars": 609,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Create.cs",
    "chars": 2159,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.NSubstitute.Extensions;\nusing EntityFrameworkCore.Testing.NSubstitu"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/EntityFrameworkCore.Testing.NSubstitute.csproj",
    "chars": 903,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>rgvlee<"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/EntityFrameworkCore.Testing.NSubstitute.xml",
    "chars": 20606,
    "preview": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>EntityFrameworkCore.Testing.NSubstitute</name>\n    </assembly>\n"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Extensions/DbContextExtensions.cs",
    "chars": 9931,
    "preview": "#pragma warning disable EF1001 // Internal EF Core API usage.\n\nusing System;\nusing System.Collections.Generic;\nusing Sy"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Extensions/DbSetExtensions.Internal.cs",
    "chars": 5888,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Lin"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Extensions/QueryProviderExtensions.Internal.cs",
    "chars": 1143,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing EntityFrameworkCore.Testing.Common;\nusing NSubstitute;\nusing"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Extensions/QueryProviderExtensions.cs",
    "chars": 7889,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing EntityFramework"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Extensions/QueryableExtensions.cs",
    "chars": 6137,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing rgvlee.Core.Common.Helpers;\n\nnamespace EntityFr"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Extensions/ReadOnlyDbSetExtensions.Internal.cs",
    "chars": 8151,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Lin"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Extensions/ReadOnlyDbSetExtensions.cs",
    "chars": 2603,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.EntityFrameworkCore;\nusing rgvlee.Core.Common.Help"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Helpers/MockedDbContextBuilder.cs",
    "chars": 690,
    "preview": "using EntityFrameworkCore.Testing.Common.Helpers;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace EntityFrameworkCore.T"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Helpers/MockedDbContextFactory.Internal.cs",
    "chars": 10743,
    "preview": "#pragma warning disable EF1001 // Internal EF Core API usage.\n\nusing System;\nusing System.Collections.Generic;\nusing Sy"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute/Helpers/NoSetUpHandler.cs",
    "chars": 6487,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading;\nusi"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/BaseForDbContextTests.cs",
    "chars": 1627,
    "preview": "using System;\nusing System.Collections.Generic;\nusing EntityFrameworkCore.Testing.NSubstitute.Extensions;\nusing Microso"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/BaseForDbQueryTests.cs",
    "chars": 2446,
    "preview": "using System;\nusing System.Collections.Generic;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing EntityFrameworkCo"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/BaseForDbSetTests.cs",
    "chars": 1865,
    "preview": "using System;\nusing System.Collections.Generic;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing EntityFrameworkCo"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByPropertyDbSetTests.cs",
    "chars": 303,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.Common.Tests;\n\nnamespace EntityFrameworkCore.Testing.NSubstitute.T"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByPropertyReadOnlyDbSetExceptionTests.cs",
    "chars": 611,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framework;\n\nnamespace "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByPropertyReadOnlyDbSetTests.cs",
    "chars": 342,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.Common.Tests;\n\nnamespace EntityFrameworkCore.Testing.NSubstitute.T"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByTypeDbSetTests.cs",
    "chars": 860,
    "preview": "using System.Linq;\nusing System.Linq.Expressions;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing NSubstitute;\nus"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByTypeReadOnlyDbSetExceptionTests.cs",
    "chars": 612,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framework;\n\nnamespace "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/ByTypeReadOnlyDbSetTests.cs",
    "chars": 338,
    "preview": "using System.Linq;\nusing EntityFrameworkCore.Testing.Common.Tests;\n\nnamespace EntityFrameworkCore.Testing.NSubstitute.T"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/CreateFactoryTests.cs",
    "chars": 1489,
    "preview": "using System;\nusing System.Linq;\nusing Castle.DynamicProxy;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Micro"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/DbContextTestsUsingConstructorParameters.cs",
    "chars": 565,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/DbContextTestsUsingType.cs",
    "chars": 398,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing NUnit.Framework;\n\nnamespace EntityFrameworkCore.Testing.NSubstitu"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/EntityFrameworkCore.Testing.NSubstitute.Tests.csproj",
    "chars": 1377,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <IsPackable>fals"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue114Tests.cs",
    "chars": 281,
    "preview": "namespace EntityFrameworkCore.Testing.NSubstitute.Tests\n{\n    public class Issue114Tests : Common.Tests.Issue114Tests\n "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue117Tests.cs",
    "chars": 281,
    "preview": "namespace EntityFrameworkCore.Testing.NSubstitute.Tests\n{\n    public class Issue117Tests : Common.Tests.Issue117Tests\n "
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue126Tests.cs",
    "chars": 607,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue1Tests.cs",
    "chars": 2048,
    "preview": "using System;\nusing System.Data;\nusing Microsoft.Data.SqlClient;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue49Tests.cs",
    "chars": 384,
    "preview": "using EntityFrameworkCore.Testing.Common.Tests;\nusing NUnit.Framework;\n\nnamespace EntityFrameworkCore.Testing.NSubstitu"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue4Tests.cs",
    "chars": 2055,
    "preview": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing AutoFixture;\nusing EntityFrameworkCore.Testing.Com"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue6Tests.cs",
    "chars": 2271,
    "preview": "using System;\nusing System.Collections.Generic;\nusing AutoFixture;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusin"
  },
  {
    "path": "src/EntityFrameworkCore.Testing.NSubstitute.Tests/Issue88Tests.cs",
    "chars": 617,
    "preview": "using System;\nusing EntityFrameworkCore.Testing.Common.Tests;\nusing Microsoft.EntityFrameworkCore;\nusing NUnit.Framewor"
  }
]

About this extraction

This page contains the full source code of the rgvlee/EntityFrameworkCore.Testing GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 122 files (400.2 KB), approximately 90.0k tokens, and a symbol index with 494 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!