efcore.pg icon indicating copy to clipboard operation
efcore.pg copied to clipboard

Errors compiling optimized DbContext that contains fixed length property

Open miegir opened this issue 2 years ago • 7 comments

Steps to reproduce:

  1. In an empty folder, create a new console application: dotnet ef console
  2. Replace Program.cs with the following code:
using Microsoft.EntityFrameworkCore;

Console.WriteLine("Hello world!");

public class Entity
{
    public int Id { get; set; }
    public string? Name { get; set; }
}

public class ApplicationDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseNpgsql();

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Entity>().Property(t => t.Name).HasMaxLength(10).IsFixedLength();
    }
}
  1. Execute dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
  2. Execute dotnet add package Microsoft.EntityFrameworkCore.Design
  3. Execute dotnet new tool-manifest
  4. Execute dotnet tool install dotnet-ef
  5. Execute dotnet ef dbcontext optimize
  6. Execute dotnet build

Expected behavior: the application will compile.

Actual behavior: compilation errors:

D:\ghbug\CompiledModels\EntityEntityType.cs(58,78): error CS0117: 'NpgsqlCharacterStringTypeMapping' does not contain a definition for 'EqualsWithoutTrailingWhitespace' [D:\ghbug\ghbug.csproj]
D:\ghbug\CompiledModels\EntityEntityType.cs(59,68): error CS0117: 'NpgsqlCharacterStringTypeMapping' does not contain a definition for 'GetHashCodeWithoutTrailingWhitespace' [D:\ghbug\ghbug.csproj]
D:\ghbug\CompiledModels\EntityEntityType.cs(62,78): error CS0117: 'NpgsqlCharacterStringTypeMapping' does not contain a definition for 'EqualsWithoutTrailingWhitespace' [D:\ghbug\ghbug.csproj]
D:\ghbug\CompiledModels\EntityEntityType.cs(63,68): error CS0117: 'NpgsqlCharacterStringTypeMapping' does not contain a definition for 'GetHashCodeWithoutTrailingWhitespace' [D:\ghbug\ghbug.csproj]
D:\ghbug\CompiledModels\EntityEntityType.cs(66,78): error CS0117: 'NpgsqlCharacterStringTypeMapping' does not contain a definition for 'EqualsWithoutTrailingWhitespace' [D:\ghbug\ghbug.csproj]
D:\ghbug\CompiledModels\EntityEntityType.cs(67,68): error CS0117: 'NpgsqlCharacterStringTypeMapping' does not contain a definition for 'GetHashCodeWithoutTrailingWhitespace' [D:\ghbug\ghbug.csproj]

This technique worked with Npgsql.EntityFrameworkCore.PostgreSQL version 7.0 but stopped working with 8.0 in which these methods were removed.

miegir avatar Nov 21 '23 15:11 miegir

I get the same error and also "'NpgsqlCharacterStringTypeMapping' does not contain a definition for 'EqualsWithoutTrailingWhitespace'"

molyviatis avatar Dec 29 '23 19:12 molyviatis

I'm not sure whether the authors ignoring us, but meanwhile I have the following "polyfill" that can be added to the project to resolve the problem: https://gist.github.com/miegir/63961ebdc117ed74e1dd79a5f5afd190.

miegir avatar Dec 30 '23 20:12 miegir

@miegir definitely not ignoring you, but there's a massive amount of work going on. I'll try to get to this for 8.0.1 or 8.0.2 at the latest.

roji avatar Dec 31 '23 11:12 roji

Hi @roji, not sure if this helps but it seems to occur on properties that have IsFixedLength", true

molyviatis avatar Jan 06 '24 01:01 molyviatis

I'm not sure whether the authors ignoring us, but meanwhile I have the following "polyfill" that can be added to the project to resolve the problem: https://gist.github.com/miegir/63961ebdc117ed74e1dd79a5f5afd190.

Thank you so much! I placed the class in the same namespace as my optimized model and it has resolved my errors.

My naïve PR for this problem would be to simply make the EqualsWithoutTrailingWhitespace and GetHashCodeWithoutTrailingWhitespace methods public

chriscameron-vertexinc avatar Jan 06 '24 17:01 chriscameron-vertexinc

I ran into this as well on the brand new 8.0.2 just a heads up to anyone trying to make compiled models

eero-dev avatar Feb 19 '24 08:02 eero-dev

+1, Just ran into it today on 8.0.2

nibblesnbits avatar Feb 28 '24 00:02 nibblesnbits

Fixed in 51faf6e9c9c7ef99c3e98d98a96adb8fa8ae4553

roji avatar May 11 '24 16:05 roji