【发布时间】:2019-07-12 17:09:07
【问题描述】:
当试图在数据库中保留西里尔字母时,数据库中只保存倒置问号。
模型是这样的
public class Roles {
public string Name { get; set; }
public string Appname { get; set; }
public string Description { get; set; }
}
创建这样的上下文
modelBuilder.Entity<Roles>(entity =>
{
entity.HasKey(e => new { e.Name, e.Appname });
entity.ToTable("ROLES");
entity.HasIndex(e => new { e.Name, e.Appname })
.HasName("PK_ROLES")
.IsUnique();
entity.Property(e => e.Name)
.HasColumnName("NAME")
.HasMaxLength(100)
.IsUnicode(false);
entity.Property(e => e.Appname)
.HasColumnName("APPNAME")
.HasMaxLength(20)
.IsUnicode(false);
entity.Property(e => e.Description)
.HasColumnName("DESCRIPTION")
//.HasMaxLength(256)
//.IsUnicode(true);
.HasColumnType("NVARCHAR2(256)");
});
试过了,注释掉了什么和下一行
The table looks created correctly
以及这段代码的执行
using (var context = new FrontContext())
{
var roles = context.Roles.ToList();
var role = new Roles{
Name = $"ADMINS{DateTime.Now.ToString("HHmmss")}",
Appname = "TESTAPP",
Description = "тестовая роль"};
context.Add(role);
context.SaveChanges();
}
【问题讨论】:
-
截图(我猜来自 SSMS)可能是在撒谎。您是否尝试过回读 (
var roles = new FrontContext().Roles.ToList();) 并在 VS locals/watch 窗口中检查结果? -
是的,读取通过 EF 保存的数据也会返回倒置问题。使用 Toad 保存在数据库中的数据被正确读取。
-
刚刚注意到
oracle标签。该代码在 SqlServer 上工作得很好,所以它可能是一个(Oracle 的典型)提供程序错误。特别是它是测试版。您最好检查更新或……好吧,基本上您无能为力,因为他们不提供支持 afaik。
标签: oracle entity-framework-core cyrillic