Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kerangka Entitas dan beberapa skema

Saat melakukan penelitian tentang Entity Framework, saya menemukan posting berikut:

http://romiller.com/2011/05/23/ef-4-1-multi-tenant-with-code-first/

Itu tidak cukup memberi saya satu dbContext untuk bekerja tetapi itu hanya menggunakan satu koneksi (yang merupakan alasan saya di balik tidak ingin menggunakan banyak dbContexts). Setelah mengatur kode berikut:

public class oraDbContext : DbContext
{
    static oraDbContext() {
        Database.SetInitializer<oraDbContext>(null);
    }

    private oraDbContext(DbConnection connection, DbCompiledModel model)
        : base(connection, model, contextOwnsConnection: false) { }

    public DbSet<SomeTable1> SomeTable1 { get; set; }
    public DbSet<SomeTable2> SomeTable2 { get; set; }

    private static ConcurrentDictionary<Tuple<string, string>, DbCompiledModel> modelCache = new ConcurrentDictionary<Tuple<string, string>, DbCompiledModel>();

    public static oraDbContext Create(string schemaName, DbConnection connection) {
        var compiledModel = modelCache.GetOrAdd(
            Tuple.Create(connection.ConnectionString, schemaName),
            t =>
            {
                var builder = new DbModelBuilder();
                builder.Configurations.Add<SomeTable1>(new SomeTable1Map(schemaName));
                builder.Configurations.Add<SomeTable2>(new SomeTable2Map(schemaName));

                var model = builder.Build(connection);
                return model.Compile();
            });

        return new oraDbContext(connection, compiledModel);
    }
}

Ini tentu saja mengharuskan file pemetaan saya diatur seperti ini:

public class DailyDependencyTableMap : EntityTypeConfiguration<DailyDependencyTable>
{
    public SomeTableMap(string schemaName) {
        this.ToTable("SOME_TABLE_1", schemaName.ToUpper());

        //Map other properties and stuff
    }
}

Menulis kueri yang menggunakan banyak skema agak mengganggu tetapi, untuk saat ini, itu melakukan apa yang saya perlukan:

using (var connection = new OracleConnection("a connection string")) {
    using (var schema1 = oraDbContext.Create("SCHEMA1", connection))
    using (var schema2 = oraDbContext.Create("SCHEMA2", connection)) {

        var query = ((from a in schema1.SomeTable1 select new { a.Field1 }).ToList())
             .Concat((from b in schema2.SomeTable1 select new { b.Field1 }).ToList())
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Keamanan Database Oracle – Enkripsi dan Dekripsi

  2. Memperbarui Tabel Di Oracle Jika Nilai Bidang Apa Pun Null Dan Menentukan Bahwa Pembaruan Berhasil

  3. Ubah kueri tampilan terwujud

  4. Partisi Split Cepat

  5. Oracle SQL - REGEXP_LIKE berisi karakter selain a-z atau A-Z