Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"The LINQ expression could not be translated" with in-memory provider #24318

Closed
thomaslevesque opened this issue Mar 4, 2021 · 14 comments
Closed
Labels
closed-out-of-scope This is not something that will be fixed/implemented and the issue is closed. customer-reported punted-for-6.0 punted-for-7.0 Originally planned for the EF Core 7.0 (EF7) release, but moved out due to resource constraints.

Comments

@thomaslevesque
Copy link
Member

thomaslevesque commented Mar 4, 2021

The following query fails to translate using the in-memory provider

return await _dbContext.Affaires
    .Include(a => a.Tiers).ThenInclude(t => t.Tiers)
    .Include(a => a.Nature)
    .SingleAsync(a => a.Id == affaire.Id, cancellationToken);

I get the following exception:

The LINQ expression 'DbSet<Affaire>()
    .Where(a => EF.Property<TenantId>((object)a, "TenantId") == 3921751e-f1af-4fa3-b3cf-1605b898b928)
    .Where(a => a.Id == __affaire_Id_0)
    .Join(
        inner: DbSet<NatureAffaire>(), 
        outerKeySelector: a => EF.Property<NatureAffaireId>(a, "NatureId"), 
        innerKeySelector: n => EF.Property<NatureAffaireId>(n, "Id"), 
        resultSelector: (o, i) => new TransparentIdentifier<Affaire, NatureAffaire>(
            Outer = o, 
            Inner = i
        ))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

Stack trace:

   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|15_0(ShapedQueryExpression translated, <>c__DisplayClass15_0& )
   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at Microsoft.EntityFrameworkCore.InMemory.Query.Internal.InMemoryQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at Microsoft.EntityFrameworkCore.InMemory.Query.Internal.InMemoryQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at Microsoft.EntityFrameworkCore.InMemory.Query.Internal.InMemoryQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query)
   at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0()
   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, Expression expression, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, LambdaExpression expression, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.SingleAsync[TSource](IQueryable`1 source, Expression`1 predicate, CancellationToken cancellationToken)
   (redacted)
--- End of stack trace from previous location ---
   at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func`1 asyncAction) in C:\Dev\xunit\xunit\src\xunit.execution\Sdk\Frameworks\ExecutionTimer.cs:line 48
   at Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) in C:\Dev\xunit\xunit\src\xunit.core\Sdk\ExceptionAggregator.cs:line 90

I'm not sure what it should be "translated" to (does the in-memory provider use its own query language?), but it's a pretty basic query, and it's failing miserably.

The same query works fine with the SQL Server provider.
The same query without the Includes works with the in-memory provider.

It's worth noting that there's something unusual in my DbContext: I use strongly-typed ids. In other words, for each entity Foo, there's a FooId record that wraps a GUID. I suspect it's what causing the issue. Unless it's because the in-memory provider doesn't support Includes, but I'd be very surprised if it didn't.

EF Core version: 5.0.3
Database provider: in-memory
Target framework: .NET 5.0
Operating system: Windows 10
IDE: JetBrains Rider

@villanyibalint
Copy link

We experienced the same exact issue.

  • We also use strongly typed IDs
  • It only happens with the in-memory provider and not SQL Server
  • For us the issue came up with a many-to-many relationship

I tried to assemble the smallest reproduction I could:

internal class Program
{
  private static void Main(string[] args)
  {
    SqlServer();
    InMemory();
  }

  /// <summary>
  /// Run the query on an in-memory DbContext
  /// </summary>
  private static void InMemory()
  {
    var options = new DbContextOptionsBuilder<ExampleContext>()
        .UseInMemoryDatabase("db")
        .Options;

    using var ctx = new ExampleContext(options);

    Query(ctx);
  }

  /// <summary>
  /// Run the query on an SQLServer DbContext
  /// </summary>
  private static void SqlServer()
  {
    var options = new DbContextOptionsBuilder<ExampleContext>()
        .UseSqlServer("Server=.\\SQLEXPRESS01;Database=EFInMemoryQueryIssue;Trusted_Connection=True;")
        .Options;

    using var ctx = new ExampleContext(options);

    ctx.Database.EnsureDeleted();
    ctx.Database.EnsureCreated();

    Query(ctx);
  }

  /// <summary>
  /// Actual query to run
  /// </summary>
  private static void Query(ExampleContext ctx)
  {
    try
    {
      var owner = ctx
        .Owners
        .Include(o => o.OwnedEntities)
        .FirstOrDefault();
      Console.WriteLine("Query successful.");
    }
    catch (Exception e)
    {
      Console.WriteLine(e.Message);
    }
  }
}

/// <summary>
/// Example DbContext
/// </summary>
internal class ExampleContext : DbContext
{
  public ExampleContext(DbContextOptions<ExampleContext> dbContextOptions) : base(dbContextOptions)
  {
  }

  public DbSet<OwnerEntity> Owners => Set<OwnerEntity>();

  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    // strongly typed ID conversion setup
    modelBuilder.Entity<OwnedEntity>().Property(o => o.Id)
      .HasConversion(id => id.Id, id => new(id));

    // many-to-many relationship
    modelBuilder.Entity<OwnerEntity>()
      .HasMany(o => o.OwnedEntities)
      .WithMany(s => s.Owners);
  }
}

record StronglyTypedId(Guid Id);

internal class OwnedEntity
{
  public StronglyTypedId Id { get; set; } = new(Guid.NewGuid());

  public ICollection<OwnerEntity> Owners { get; set; }
}

internal class OwnerEntity
{
  public Guid Id { get; set; } = Guid.NewGuid();

  public List<OwnedEntity> OwnedEntities { get; set; }
}

Additionally, based on my observation, it is enough if the joined table has an ID with a conversion.

Exception message:

The LINQ expression 'DbSet<Dictionary<string, object>>("OwnedEntityOwnerEntity")
    .Where(o0 => EF.Property<Nullable<Guid>>(EntityShaperExpression:
        EntityType: OwnerEntity
        ValueBufferExpression:
            ProjectionBindingExpression: EmptyProjectionMember
        IsNullable: False
    , "Id") != null && object.Equals(
        objA: (object)EF.Property<Nullable<Guid>>(EntityShaperExpression:
            EntityType: OwnerEntity
            ValueBufferExpression:
                ProjectionBindingExpression: EmptyProjectionMember
            IsNullable: False
        , "Id"),
        objB: (object)EF.Property<Nullable<Guid>>(o0, "OwnersId")))
    .Join(
        inner: DbSet<OwnedEntity>(),
        outerKeySelector: o0 => EF.Property<StronglyTypedId>(o0, "OwnedEntitiesId"),
        innerKeySelector: o1 => EF.Property<StronglyTypedId>(o1, "Id"),
        resultSelector: (o0, o1) => new TransparentIdentifier<Dictionary<string, object>, OwnedEntity>(
            Outer = o0,
            Inner = o1
        ))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

@JssDWt
Copy link

JssDWt commented Sep 3, 2021

I'm facing the same issue with byte[] keys. When I use the Sqlite provider it does work.
When the line .Include(a => a.Root) is removed, it does fetch the right child from the in-memory database. So it must be the join that's not working.

class Program
{
    static async Task Main()
    {
        var rootKey = new byte[8];
        new Random().NextBytes(rootKey);

        using var dbContext = new MyDbContext();
        dbContext.Roots.Add(new RootEntity { Key = rootKey });
        dbContext.Children.Add(new ChildEntity { RootKey = rootKey });
        await dbContext.SaveChangesAsync();

        var child = await dbContext.Children
            .Where(a => a.RootKey == rootKey)
            .Include(a => a.Root)
            .FirstOrDefaultAsync();
    }
}

public class RootEntity
{
    public byte[] Key { get; set; }
    public virtual ICollection<ChildEntity> Children { get; set; }
}

public class ChildEntity
{
    public int Id { get; set; }
    public byte[] RootKey { get; set; }
    public virtual RootEntity Root { get; set; }
}

public class MyDbContext : DbContext
{
    public DbSet<RootEntity> Roots { get; set; }
    public DbSet<ChildEntity> Children { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseInMemoryDatabase("testdatabase");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ChildEntity>(child =>
        {
            child.HasOne(a => a.Root)
                .WithMany(n => n.Children)
                .HasForeignKey(a => a.RootKey);
        });

        modelBuilder.Entity<RootEntity>(root =>
        {
            root.HasKey(n => n.Key);
        });
    }
}

This throws the following Exception:

An exception of type 'System.InvalidOperationException' occurred in Microsoft.EntityFrameworkCore.dll but was not handled in user code: 'The LINQ expression 'DbSet<ChildEntity>()
    .Where(c => c.RootKey == __rootKey_0)
    .LeftJoin(
        inner: DbSet<RootEntity>(), 
        outerKeySelector: c => EF.Property<byte[]>(c, "RootKey"), 
        innerKeySelector: r => EF.Property<byte[]>(r, "Key"), 
        resultSelector: (o, i) => new TransparentIdentifier<ChildEntity, RootEntity>(
            Outer = o, 
            Inner = i
        ))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.'
   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|15_0(ShapedQueryExpression translated, <>c__DisplayClass15_0& )
   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at Microsoft.EntityFrameworkCore.InMemory.Query.Internal.InMemoryQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at Microsoft.EntityFrameworkCore.InMemory.Query.Internal.InMemoryQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at Microsoft.EntityFrameworkCore.InMemory.Query.Internal.InMemoryQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query)
   at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0()
   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, Expression expression, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.FirstOrDefaultAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
   at Program.<Main>d__0.MoveNext() in /Path/To/Project/Program.cs:line 22

@smitpatel smitpatel assigned smitpatel and unassigned maumar Sep 11, 2021
@smitpatel smitpatel removed this from the 6.0.0 milestone Sep 13, 2021
@smitpatel smitpatel added the priority-bug Issues which requires API breaks and have bigger impact hence should be fixed earlier in the release label Sep 13, 2021
@AndriySvyryd AndriySvyryd added this to the Backlog milestone Sep 14, 2021
@thomaslevesque
Copy link
Member Author

Any news on this one?

I can confirm this is related to the usage of strongly-typed ids. With int ids and Includes, it works fine. With strongly-typed ids and no Includes it works. With both strongly-typed ids and includes, it fails.

Here's a short repro.

This code fails:

void Main()
{
    var options = new DbContextOptionsBuilder<MyDbContext>()
        .UseInMemoryDatabase("test")
        .Options;

    // Add to DB
    {
        using var dbContext = new MyDbContext(options);
        var product = new Product
        {
            Id = new(1),
            Name = "Toto / Titi",
            Category = new Category { Id = new(1), Name = "blabla" }
        };
        dbContext.Add(product);
        dbContext.SaveChanges();
    }

    // Load from DB with Include
    {
        using var dbContext = new MyDbContext(options);

        var productId = new ProductId(1);
        var product = dbContext.Products
            .Include(a => a.Category)
            .Single(a => a.Id == productId);
            
        product.Dump();
    }
}

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
    {
    }
    
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        
        modelBuilder.Entity<Product>(builder => 
        {
            builder.HasKey(e => e.Id);
            builder.Property(e => e.Id).HasConversion(id => id.Value, value => new ProductId(value));
            builder.Property(e => e.CategoryId).HasConversion(id => id.Value, value => new CategoryId(value));
            builder.HasOne(e => e.Category).WithMany().HasForeignKey(e => e.CategoryId).IsRequired();
        });

        modelBuilder.Entity<Category>(builder =>
        {
            builder.HasKey(e => e.Id);
            builder.Property(e => e.Id).HasConversion(id => id.Value, value => new CategoryId(value));
        });
    }
}

public record ProductId(int Value);
public record CategoryId(int Value);

public class Product
{
    public ProductId Id { get; set; }
    public string Name { get; set; }
    public CategoryId CategoryId { get; set; }
    
    public Category Category { get; set; }
}

public class Category
{
    public CategoryId Id { get; set; }
    public string Name { get; set; }
}

The same code minus the strongly-typed ids works fine:

void Main()
{
    var options = new DbContextOptionsBuilder<MyDbContext>()
        .UseInMemoryDatabase("test")
        .Options;

    // Add to DB
    {
        using var dbContext = new MyDbContext(options);
        var product = new Product
        {
            Id = 1,
            Name = "Toto / Titi",
            Category = new Category { Id = 1, Name = "blabla" }
        };
        dbContext.Add(product);
        dbContext.SaveChanges();
    }

    // Load from DB with Include
    {
        using var dbContext = new MyDbContext(options);

        var productId = 1;
        var product = dbContext.Products
            .Include(a => a.Category)
            .Single(a => a.Id == productId);
            
        product.Dump();
    }
}

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
    {
    }
    
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        
        modelBuilder.Entity<Product>(builder => 
        {
            builder.HasKey(e => e.Id);
            builder.HasOne(e => e.Category).WithMany().HasForeignKey(e => e.CategoryId).IsRequired();
        });

        modelBuilder.Entity<Category>(builder =>
        {
            builder.HasKey(e => e.Id);
        });
    }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CategoryId { get; set; }
    
    public Category Category { get; set; }
}

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
}

(tested in LinqPad with EF 5.0.11)

@ajcvickers ajcvickers modified the milestones: Backlog, 7.0.0 Nov 10, 2021
@fallingsappy
Copy link

Using structs as PK is fine, the problem appears only if you use class as PK.

@willisd2
Copy link

I seem to be running into this same issue, or a similar one. In my situation I have the Include and am using the AsSplitQuery() extension method. The main query is also doing an explicit Join() to another table, so the Select() part of the query is receiving an anonymous object. This seemed to all work fine with the Sql Server provider, but my unit tests are failing using the InMemory provider. When I comment out the Join() and the areas out of the Select that were using the joined table, then the unit tests start passing.

@smitpatel smitpatel added the punted-for-7.0 Originally planned for the EF Core 7.0 (EF7) release, but moved out due to resource constraints. label Aug 13, 2022
@smitpatel smitpatel modified the milestones: 7.0.0, Backlog Aug 13, 2022
@smitpatel smitpatel removed their assignment Sep 14, 2022
@ajcvickers ajcvickers added propose-close closed-out-of-scope This is not something that will be fixed/implemented and the issue is closed. and removed propose-close area-query area-in-memory priority-bug Issues which requires API breaks and have bigger impact hence should be fixed earlier in the release labels Oct 20, 2022
@ajcvickers
Copy link
Member

We recommend against using the in-memory provider for testing--see Testing EF Core Applications. While we have no plans to remove the in-memory provider, we will not be adding any new features to this provider because we believe valuable development time is better spent in other areas. When feasible, we plan to still fix regressions in existing behavior.

@ajcvickers ajcvickers closed this as not planned Won't fix, can't repro, duplicate, stale Oct 26, 2022
@ajcvickers ajcvickers removed this from the Backlog milestone Oct 26, 2022
@wallymathieu
Copy link

Thanks! Good to see that there are docs around what to use 🙂

@NickStrupat
Copy link

As far as I could tell, the docs linked here currently do not recommend against the in-memory provider.

We recommend against using the in-memory provider for testing--see Testing EF Core Applications. While we have no plans to remove the in-memory provider, we will not be adding any new features to this provider because we believe valuable development time is better spent in other areas. When feasible, we plan to still fix regressions in existing behavior.

@roji
Copy link
Member

roji commented Apr 19, 2023

@NickStrupat we do recommend against using the in-memory provider. See the Choosing a testing strategy page, and specifically this section.

@yuominae
Copy link

yuominae commented Jan 8, 2024

It's worth noting that using Sqlite instead of the in-memory provider is only shifting the problem. My unit tests were implemented using sqlite from the beginning because of the guidance in the docs. It works fine if you enable foreign keys, which the in-memory provider can;t do, but it also cannot translate all linq queries properly (notably String.Contains()). And now switching the strongly typed ids just destroyed all the sqlite tests as sqlite, event though the integration tests with SQL Server work just fine.

@thomaslevesque
Copy link
Member Author

Yeah. At this point, the only reliable approach is to test against the real DB engine. You can easily spin up a SQL Server container using TestContainers.

@roji
Copy link
Member

roji commented Jan 8, 2024

@yuominae what @thomaslevesque said. Testing against a fake database (in-memory, sqlite...) used to make more sense, but in today's world of easy containerization and testcontainers, you really should be testing against SQL Server.

@yuominae
Copy link

yuominae commented Jan 9, 2024

Thanks to both of you for confirming. I wish the guidance on tests would use stronger wording there. It's definitely something I will take into account in the future, but wanted to document the problems here for anybody who'll stumble across this issue :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
closed-out-of-scope This is not something that will be fixed/implemented and the issue is closed. customer-reported punted-for-6.0 punted-for-7.0 Originally planned for the EF Core 7.0 (EF7) release, but moved out due to resource constraints.
Projects
None yet
Development

No branches or pull requests