使用 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; }
}
对于 firebird,大多数时候,可以使用 CharSet UTF-8 处理特殊字符问题。在 connectionString
内,您可能需要包含 charset=utf8
.
添加更新:
感谢@Felipe Godinho 的反馈,似乎 charset=win1252
已被发现是 CharSet 的另一个有价值的选项,在处理 Firebird 上的 运行 遗留数据库系统时值得尝试.
我正在将用 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; }
}
对于 firebird,大多数时候,可以使用 CharSet UTF-8 处理特殊字符问题。在 connectionString
内,您可能需要包含 charset=utf8
.
添加更新:
感谢@Felipe Godinho 的反馈,似乎 charset=win1252
已被发现是 CharSet 的另一个有价值的选项,在处理 Firebird 上的 运行 遗留数据库系统时值得尝试.