EF/EFCore访问Oracle数据库命不中索引,执行慢问题
如果你Oracle数据库的字段类型varchar2,你C#的model类使用string则默认会命不中索引,造成执行性能慢问题
EFCore解决方案:
因为EF访问Oracle默认支持Unicode数据类型,默认将string映射为nvarchar2,如果数据库类型不是nvarchar2则无法命中索引。
重写context的OnModelCreating,将默认string映射修改为varchar2,即不支持Unicode类型即可
protected override void OnModelCreating(ModelBuilder modelBuilder) { //解决Unicode类型前加N后命不中索引问题 foreach (var property in modelBuilder.Model.GetEntityTypes().SelectMany(t => t.GetProperties()).Where(p => p.ClrType == typeof(string))) { property.SetIsUnicode(false); } base.OnModelCreating(modelBuilder); }
EF解决方案:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { //解决Unicode类型前加N后命不中索引问题 modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false)); base.OnModelCreating(modelBuilder); }
至此可解决因数据类型不一致造成的数据库查询性能问题
最近评论