使用 Firebird 2.5 进行 EF Core 编码

EF Core encoding with Firebird 2.5

我正在将用 Delphi + FireDac 制作的遗留系统迁移到 C# + EF。由于是遗留系统,已经有很多记录的数据库(很多记录没有编码信息)。

当我使用 C# + EF 获取包含特殊字符的记录时,这些字符无法正确显示。

我该如何解决这个问题?

C#

Delphi

MainWindow.xaml.cs - ButtonClick

private void Button_Click(object sender, RoutedEventArgs e)
{
    string appPath = AppContext.BaseDirectory;
    string connectionString = $"database=localhost/3050:{appPath}\database\test.fdb;user=sysdba;password=masterkey";          
    using (AppDbContext con = new AppDbContext(connectionString))
    {
        Product p = con.Products.First();
        lblText.Text = p.Name;                
    }
}

AppDbContext.cs

public class AppDbContext : DbContext
{
    private readonly string _connectionString;
    public DbSet<Product> Products { get; set; }

    public AppDbContext(string connectionString)
    {
        _connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);

        optionsBuilder.UseFirebird(_connectionString);
    }
}

Product.cs

[Table("PRODUCTS")]
public class Product
{
    [Column("ID")]
    public int Id { get; set; }
    [Column("NAME")]
    public string Name { get; set; }
}

Complete C# project code

对于 firebird,大多数时候,可以使用 CharSet UTF-8 处理特殊字符问题。在 connectionString 内,您可能需要包含 charset=utf8.

添加更新:

感谢@Felipe Godinho 的反馈,似乎 charset=win1252 已被发现是 CharSet 的另一个有价值的选项,在处理 Firebird 上的 运行 遗留数据库系统时值得尝试.