Mon*_*nky 5 .net c# firebird entity-framework
嗨,大家好!我是新来的,我希望我这样做"问"-Thingy吧.;)发现了一个非常令人困惑的问题,我希望有人可以帮助我.
我对EntityFramework.Firebird-Provider有一个非常具体的问题.
当我尝试使用EntityFramework更新实体的属性时,特殊字符(如ö,ü,ä和ß)将转换为点.但是,这只有在我使用Firebird的EmbeddedServer功能时才会发生.
使用一个表创建一个简单的Firebird-Database.这是我的测试表的DDL:
CREATE TABLE CUSTOMER
(
ID INTEGER NOT NULL,
NAME1 VARCHAR(50) COLLATE ISO8859_1,
NAME2 VARCHAR(50) COLLATE ISO8859_1,
STREET VARCHAR(50) COLLATE ISO8859_1,
CONSTRAINT PK_CUSTOMER PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)
创建一个小的C#Test-Project并添加NuGet-Packages
之后你必须更新EntityFramework!我为此使用了版本6.1.3.
添加一个简单的Entity,TypeConfiguration和DbContext,如下所示:
public class SimpleCustomer
{
public int Id { get; set; }
public string Name1 { get; set; }
public string Name2 { get; set; }
public string Street { get; set; }
}
public class SimpleCustomerTypeConfiguration : EntityTypeConfiguration<SimpleCustomer>
{
public SimpleCustomerTypeConfiguration()
{
this.ToTable("CUSTOMER");
this.HasKey(e => e.Id);
this.Property(e => e.Id).HasColumnName("ID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.Property(e => e.Name1).HasColumnName("NAME1");
this.Property(e => e.Name2).HasColumnName("NAME2");
this.Property(e => e.Street).HasColumnName("STREET");
}
}
public class FbContext : DbContext
{
public DbSet<SimpleCustomer> SimpleCustomers { get; set; }
public FbContext(DbConnection connection) : base(connection, false)
{
Database.SetInitializer(new NullDatabaseInitializer<FbContext>());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new SimpleCustomerTypeConfiguration());
base.OnModelCreating(modelBuilder);
}
}
Run Code Online (Sandbox Code Playgroud)
当您现在尝试使用DbContext更新Street等属性时,例如:
using (var connection = new FbConnection(@"User=SYSDBA; Password=masterkey; Database=TEST.FDB; CharSet=ISO8859_1; ServerType=1; Pooling=false;"))
{
connection.Open();
using (var context = new FbContext(connection))
{
var writeCustomer = context.SimpleCustomers.Find(1);
writeCustomer.Street = @"Schloßallee 34";
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
街道在数据库中被保存为Schlo.allee 34.
以下是我设法弄清楚的一些其他信息:
当您使用经典SQL Update-Command时,更新工作完全正常,例如:
using (var connection = new FbConnection(@"User=SYSDBA; Password=masterkey; Database=TEST.FDB; CharSet=ISO8859_1; ServerType=1; Pooling=false;"))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = @"UPDATE CUSTOMER SET STREET = @STREET WHERE ID = @ID";
command.Parameters.Add(new FbParameter("STREET", FbDbType.VarChar, 50) { Value = "Schloßallee 34" });
command.Parameters.Add(new FbParameter("ID", FbDbType.Integer) { Value = 1 });
command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |