PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Fragen Sie PostgreSQL mit Npgsql und Entity Framework mit unaccent ab

Wenn Sie den Codefirst verwenden Ansatz sollten Sie versuchen, EntityFramework.CodeFirstStoreFunctions zu verwenden .

  1. Fügen Sie zuerst EntityFramework.CodeFirstStoreFunctions zu Ihrem Projekt hinzu
  2. Fügen Sie eine benutzerdefinierte Konvention mit Unakzent hinzu zu DbModelBuilder
  3. Verwenden Sie es in einer Abfrage.

Beispiel für Datenbankkontext:

public class DatabaseContext : DbContext
{
    public DatabaseContext () : base("Context")
    {
        Database.SetInitializer<DatabaseContext>(null);
    }

    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("public");
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        /** Adding unaccent **/           
        modelBuilder.Conventions.Add(new CodeFirstStoreFunctions.FunctionsConvention<DatabaseContext>("public"));
    }

    [DbFunction("CodeFirstDatabaseSchema", "unaccent")]
    public string Unaccent(string value)
    {
        // no need to provide an implementation
        throw new NotSupportedException();
    }
}

Anwendungsbeispiel:

var users = ctx.Users
               .Where(elem => ctx.Unaccent(elem.FirstName) == ctx.Unaccent("João"))
               .ToList();

Wichtiger Hinweis:
Diese Lösung funktioniert mit EntityFramework6.Npgsql (das Npgsql 3.* verwendet).
Es funktioniert nicht mit Npgsql.EntityFramework (das Npgsql 2.* verwendet)