public class OracleDbContext : DbContext { public string ConnectionString { get; set; } public OracleDbContext(string connectionString) => ConnectionString = connectionString; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var logger = new LoggerFactory(); logger.AddConsole(); logger.AddDebug(); optionsBuilder.UseLoggerFactory(logger); optionsBuilder.UseOracle(ConnectionString); base.OnConfiguring(optionsBuilder); } public DbSet User { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 這個方法是在Select完才由程式去轉換,不會影響到產出的SQL modelBuilder.Entity() .Property(d => d.Name) .HasConversion(d => d.ToString(), d => Rawtohex(d)); modelBuilder.Entity() .Property(u => u.Type) .HasConversion(n => n.ToString(), n => TO_NUMBER(n)); // 將table、column名稱改為大寫,以順利查到資料表 foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { entityType.Relational().TableName = entityType.Relational().TableName.ToUpper(); foreach (var property in entityType.GetProperties()) property.Relational().ColumnName = property.Relational().ColumnName.ToUpper(); } } // DbFunction函式的內容實作無關結果,僅作為向EF註明說有這樣的函式 [DbFunction] public static int TO_NUMBER(string str) => 0; [DbFunction] public static int TO_NUMBER(int i) => 0; [DbFunction] public static string Rawtohex(string str) => ""; }