#38671·efcore

EF.Parameter or setting ParameterTranslationMode.Parameter doesn't work with IReadOnlySet

Author: IT-CASADOCreated Jul 19, 2026Updated Sep 27, 2026
Labelscustomer-reportedarea-query

Bug description

Unfortunately IReadOnlySet is not translated into a single parameter with using OPENJSON.

The generated SQL for the list filter:

sql
      SELECT [b].[BlogId]
      FROM [Blogs] AS [b]
      WHERE [b].[BlogId] IN (
          SELECT [f].[value]
          FROM OPENJSON(@filterAsList) WITH ([value] int '$') AS [f]
      )

The generated SQL for IReadOnlySet filter:

sql
      SELECT [b].[BlogId]
      FROM [Blogs] AS [b]
      WHERE [b].[BlogId] IN (@filterAsSet1, @filterAsSet2)

Your code

csharp
using Microsoft.EntityFrameworkCore;

using var dbContext = new BloggingContext();
dbContext.Database.EnsureDeleted();
dbContext.Database.EnsureCreated();

List<int> filterAsList = [1, 2];
IReadOnlySet<int> filterAsSet = filterAsList.ToHashSet();

var queryWithListFilter = await dbContext
    .Set<Blog>()
    .Where(b => filterAsList.Contains(b.BlogId))
    .ToListAsync();

var queryWithSetFilter = await dbContext
    .Set<Blog>()
    .Where(b => filterAsSet.Contains(b.BlogId))
    .ToListAsync();

class BloggingContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) =>
        optionsBuilder
            .UseSqlServer(
                "Server=(localdb)\\mssqllocaldb;Database=OpenJsonBug;Trusted_Connection=True;",
                options =>
                    options.UseParameterizedCollectionMode(ParameterTranslationMode.Parameter)
            )
            .LogTo(Console.WriteLine);

    public DbSet<Blog> Blogs { get; set; }
}

public class Blog
{
    public int BlogId { get; set; }
}

Stack traces

Verbose output

dbug: 19.07.2026 21:14:19.137 CoreEventId.ContextInitialized[10403] (Microsoft.EntityFrameworkCore.Infrastructure)
      Entity Framework Core 10.0.10 initialized 'BloggingContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer:10.0.10' with options: ParameterizedCollectionTranslationMode=Parameter EngineType=SqlServer
dbug: 19.07.2026 21:14:19.144 RelationalEventId.ConnectionCreating[20005] (Microsoft.EntityFrameworkCore.Database.Connection)
      Creating DbConnection.
dbug: 19.07.2026 21:14:19.158 RelationalEventId.ConnectionCreated[20006] (Microsoft.EntityFrameworkCore.Database.Connection)
      Created DbConnection. (12ms).
dbug: 19.07.2026 21:14:19.160 RelationalEventId.ConnectionOpening[20000] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opening connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.269 RelationalEventId.ConnectionOpened[20001] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opened connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.271 RelationalEventId.CommandCreating[20103] (Microsoft.EntityFrameworkCore.Database.Command)
      Creating DbCommand for 'ExecuteNonQuery'.
dbug: 19.07.2026 21:14:19.274 RelationalEventId.CommandCreated[20104] (Microsoft.EntityFrameworkCore.Database.Command)
      Created DbCommand for 'ExecuteNonQuery' (2ms).
dbug: 19.07.2026 21:14:19.274 RelationalEventId.CommandInitialized[20106] (Microsoft.EntityFrameworkCore.Database.Command)
      Initialized DbCommand for 'ExecuteNonQuery' (4ms).
dbug: 19.07.2026 21:14:19.276 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
      Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT 1
info: 19.07.2026 21:14:19.285 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
      Executed DbCommand (9ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT 1
dbug: 19.07.2026 21:14:19.286 RelationalEventId.ConnectionClosing[20002] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closing connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.289 RelationalEventId.ConnectionClosed[20003] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closed connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb' (2ms).
dbug: 19.07.2026 21:14:19.297 RelationalEventId.ConnectionCreating[20005] (Microsoft.EntityFrameworkCore.Database.Connection)
      Creating DbConnection.
dbug: 19.07.2026 21:14:19.297 RelationalEventId.ConnectionCreated[20006] (Microsoft.EntityFrameworkCore.Database.Connection)
      Created DbConnection. (0ms).
dbug: 19.07.2026 21:14:19.297 RelationalEventId.ConnectionOpening[20000] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opening connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.299 RelationalEventId.ConnectionOpened[20001] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opened connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.299 RelationalEventId.CommandCreating[20103] (Microsoft.EntityFrameworkCore.Database.Command)
      Creating DbCommand for 'ExecuteNonQuery'.
dbug: 19.07.2026 21:14:19.299 RelationalEventId.CommandCreated[20104] (Microsoft.EntityFrameworkCore.Database.Command)
      Created DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.300 RelationalEventId.CommandInitialized[20106] (Microsoft.EntityFrameworkCore.Database.Command)
      Initialized DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.300 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
      Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='60']
      IF SERVERPROPERTY('EngineEdition') <> 5
      BEGIN
          ALTER DATABASE [OpenJsonBug] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
      END;
info: 19.07.2026 21:14:19.301 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
      IF SERVERPROPERTY('EngineEdition') <> 5
      BEGIN
          ALTER DATABASE [OpenJsonBug] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
      END;
dbug: 19.07.2026 21:14:19.301 RelationalEventId.CommandCreating[20103] (Microsoft.EntityFrameworkCore.Database.Command)
      Creating DbCommand for 'ExecuteNonQuery'.
dbug: 19.07.2026 21:14:19.301 RelationalEventId.CommandCreated[20104] (Microsoft.EntityFrameworkCore.Database.Command)
      Created DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.301 RelationalEventId.CommandInitialized[20106] (Microsoft.EntityFrameworkCore.Database.Command)
      Initialized DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.301 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
      Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='60']
      DROP DATABASE [OpenJsonBug];
info: 19.07.2026 21:14:19.313 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
      Executed DbCommand (11ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
      DROP DATABASE [OpenJsonBug];
dbug: 19.07.2026 21:14:19.313 RelationalEventId.ConnectionClosing[20002] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closing connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.313 RelationalEventId.ConnectionClosed[20003] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closed connection to database 'master' on server '(localdb)\mssqllocaldb' (0ms).
dbug: 19.07.2026 21:14:19.314 RelationalEventId.ConnectionDisposing[20007] (Microsoft.EntityFrameworkCore.Database.Connection)
      Disposing connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.314 RelationalEventId.ConnectionDisposed[20008] (Microsoft.EntityFrameworkCore.Database.Connection)
      Disposed connection to database '' on server '' (0ms).
dbug: 19.07.2026 21:14:19.315 RelationalEventId.ConnectionOpening[20000] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opening connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.319 RelationalEventId.ConnectionError[20004] (Microsoft.EntityFrameworkCore.Database.Connection)
      An error occurred using the connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.341 RelationalEventId.ConnectionCreating[20005] (Microsoft.EntityFrameworkCore.Database.Connection)
      Creating DbConnection.
dbug: 19.07.2026 21:14:19.341 RelationalEventId.ConnectionCreated[20006] (Microsoft.EntityFrameworkCore.Database.Connection)
      Created DbConnection. (0ms).
dbug: 19.07.2026 21:14:19.341 RelationalEventId.ConnectionOpening[20000] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opening connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.341 RelationalEventId.ConnectionOpened[20001] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opened connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.341 RelationalEventId.CommandCreating[20103] (Microsoft.EntityFrameworkCore.Database.Command)
      Creating DbCommand for 'ExecuteNonQuery'.
dbug: 19.07.2026 21:14:19.341 RelationalEventId.CommandCreated[20104] (Microsoft.EntityFrameworkCore.Database.Command)
      Created DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.341 RelationalEventId.CommandInitialized[20106] (Microsoft.EntityFrameworkCore.Database.Command)
      Initialized DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.341 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
      Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='60']
      CREATE DATABASE [OpenJsonBug];
info: 19.07.2026 21:14:19.414 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
      Executed DbCommand (73ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
      CREATE DATABASE [OpenJsonBug];
dbug: 19.07.2026 21:14:19.415 RelationalEventId.CommandCreating[20103] (Microsoft.EntityFrameworkCore.Database.Command)
      Creating DbCommand for 'ExecuteNonQuery'.
dbug: 19.07.2026 21:14:19.415 RelationalEventId.CommandCreated[20104] (Microsoft.EntityFrameworkCore.Database.Command)
      Created DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.415 RelationalEventId.CommandInitialized[20106] (Microsoft.EntityFrameworkCore.Database.Command)
      Initialized DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.415 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
      Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='60']
      IF SERVERPROPERTY('EngineEdition') <> 5
      BEGIN
          ALTER DATABASE [OpenJsonBug] SET READ_COMMITTED_SNAPSHOT ON;
      END;
info: 19.07.2026 21:14:19.445 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
      Executed DbCommand (30ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
      IF SERVERPROPERTY('EngineEdition') <> 5
      BEGIN
          ALTER DATABASE [OpenJsonBug] SET READ_COMMITTED_SNAPSHOT ON;
      END;
dbug: 19.07.2026 21:14:19.445 RelationalEventId.ConnectionClosing[20002] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closing connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.445 RelationalEventId.ConnectionClosed[20003] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closed connection to database 'master' on server '(localdb)\mssqllocaldb' (0ms).
dbug: 19.07.2026 21:14:19.446 RelationalEventId.ConnectionDisposing[20007] (Microsoft.EntityFrameworkCore.Database.Connection)
      Disposing connection to database 'master' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.446 RelationalEventId.ConnectionDisposed[20008] (Microsoft.EntityFrameworkCore.Database.Connection)
      Disposed connection to database '' on server '' (0ms).
dbug: 19.07.2026 21:14:19.446 RelationalEventId.ConnectionOpening[20000] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opening connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.449 RelationalEventId.ConnectionOpened[20001] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opened connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.449 RelationalEventId.CommandCreating[20103] (Microsoft.EntityFrameworkCore.Database.Command)
      Creating DbCommand for 'ExecuteNonQuery'.
dbug: 19.07.2026 21:14:19.449 RelationalEventId.CommandCreated[20104] (Microsoft.EntityFrameworkCore.Database.Command)
      Created DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.449 RelationalEventId.CommandInitialized[20106] (Microsoft.EntityFrameworkCore.Database.Command)
      Initialized DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.449 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
      Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT 1
info: 19.07.2026 21:14:19.449 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT 1
dbug: 19.07.2026 21:14:19.449 RelationalEventId.ConnectionClosing[20002] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closing connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.449 RelationalEventId.ConnectionClosed[20003] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closed connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb' (0ms).
dbug: 19.07.2026 21:14:19.475 RelationalEventId.ConnectionOpening[20000] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opening connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.475 RelationalEventId.ConnectionOpened[20001] (Microsoft.EntityFrameworkCore.Database.Connection)
      Opened connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.476 RelationalEventId.TransactionStarting[20209] (Microsoft.EntityFrameworkCore.Database.Transaction)
      Beginning transaction with isolation level 'Unspecified'.
dbug: 19.07.2026 21:14:19.479 RelationalEventId.TransactionStarted[20200] (Microsoft.EntityFrameworkCore.Database.Transaction)
      Began transaction with isolation level 'ReadCommitted'.
dbug: 19.07.2026 21:14:19.479 RelationalEventId.CommandCreating[20103] (Microsoft.EntityFrameworkCore.Database.Command)
      Creating DbCommand for 'ExecuteNonQuery'.
dbug: 19.07.2026 21:14:19.479 RelationalEventId.CommandCreated[20104] (Microsoft.EntityFrameworkCore.Database.Command)
      Created DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.479 RelationalEventId.CommandInitialized[20106] (Microsoft.EntityFrameworkCore.Database.Command)
      Initialized DbCommand for 'ExecuteNonQuery' (0ms).
dbug: 19.07.2026 21:14:19.479 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
      Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE [Blogs] (
          [BlogId] int NOT NULL IDENTITY,
          CONSTRAINT [PK_Blogs] PRIMARY KEY ([BlogId])
      );
info: 19.07.2026 21:14:19.483 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
      Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE [Blogs] (
          [BlogId] int NOT NULL IDENTITY,
          CONSTRAINT [PK_Blogs] PRIMARY KEY ([BlogId])
      );
dbug: 19.07.2026 21:14:19.483 RelationalEventId.TransactionCommitting[20210] (Microsoft.EntityFrameworkCore.Database.Transaction)
      Committing transaction.
dbug: 19.07.2026 21:14:19.485 RelationalEventId.TransactionCommitted[20202] (Microsoft.EntityFrameworkCore.Database.Transaction)
      Committed transaction.
dbug: 19.07.2026 21:14:19.486 RelationalEventId.TransactionDisposed[20204] (Microsoft.EntityFrameworkCore.Database.Transaction)
      Disposing transaction.
dbug: 19.07.2026 21:14:19.486 RelationalEventId.ConnectionClosing[20002] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closing connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb'.
dbug: 19.07.2026 21:14:19.486 RelationalEventId.ConnectionClosed[20003] (Microsoft.EntityFrameworkCore.Database.Connection)
      Closed connection to database 'OpenJsonBug' on server '(localdb)\mssqllocaldb' (0ms).
dbug: 19.07.2026 21:14:19.503 CoreEventId.QueryCompilationStarting[10111] (Microsoft.EntityFrameworkCore.Query)
      Compiling query expression:
      'DbSet<Blog>()
          .Where(b => @filterAsList.Contains(b.BlogId))'
dbug: 19.07.2026 21:14:19.618 CoreEventId.QueryExecutionPlanned[10107] (Microsoft.EntityFrameworkCore.Query)
      Generated query execution expression:
      'queryContext => SingleQueryingEnumerable.Create<Blog>(
          relationalQueryContext: (RelationalQueryContext)queryContext,
          relationalCommandResolver: parameters => [LIFTABLE Constant: RelationalCommandCache.QueryExpression(
              Projection Mapping:
                  EmptyProjectionMember -> Dictionary<IPropertyBase, int> { [Property: Blog.BlogId (int) Required PK AfterSave:Throw ValueGenerated.OnAdd, 0] }
              SELECT b.BlogId
              FROM Blogs AS b
              WHERE b.BlogId IN (
                  SELECT f.value
                  FROM OPENJSON(@filterAsList) WITH (value int '') AS f)) | Resolver: c => new RelationalCommandCache(
              c.Dependencies.MemoryCache,
              c.RelationalDependencies.QuerySqlGeneratorFactory,
              c.RelationalDependencies.RelationalParameterBasedSqlProcessorFactory,
              Projection Mapping:
                  EmptyProjectionMember -> Dictionary<IPropertyBase, int> { [Property: Blog.BlogId (int) Required PK AfterSave:Throw ValueGenerated.OnAdd, 0] }
              SELECT b.BlogId
              FROM Blogs AS b
              WHERE b.BlogId IN (
                  SELECT f.value
                  FROM OPENJSON(@filterAsList) WITH (value int '') AS f),
              False,
              Parameter
          )].GetRelationalCommandTemplate(parameters),
          readerColumns: null,
          shaper: (queryContext, dataReader, resultContext, resultCoordinator) =>
          {
              Blog entity;
              entity =
              {
                  MaterializationContext materializationContext1;
                  IEntityType entityType1;
                  Blog instance1;
                  InternalEntityEntry entry1;
                  bool hasNullKey1;
                  materializationContext1 = new MaterializationContext(
                      [LIFTABLE Constant: ValueBuffer | Resolver: _ => (object)ValueBuffer.Empty],
                      queryContext.Context
                  );
                  instance1 = default(Blog);
                  entry1 = queryContext.TryGetEntry(
                      key: [LIFTABLE Constant: Key: Blog.BlogId PK | Resolver: c => c.Dependencies.Model.FindEntityType("Blog").FindPrimaryKey()],
                      keyValues: new object[]{ (object)dataReader.GetInt32(0) },
                      throwOnNullKey: True,
                      hasNullKey: hasNullKey1);
                  !(hasNullKey1) ? entry1 != default(InternalEntityEntry) ?
                  {
                      entityType1 = entry1.EntityType;
                      return instance1 = (Blog)entry1.Entity;
                  } :
                  {
                      ISnapshot shadowSnapshot1;
                      shadowSnapshot1 = [LIFTABLE Cons