Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Khung thực thể và nhiều lược đồ

Trong khi thực hiện một số nghiên cứu về Khung thực thể, tôi đã xem bài đăng sau:

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

Nó không hoàn toàn cung cấp cho tôi một dbContext duy nhất để làm việc nhưng nó chỉ sử dụng một kết nối duy nhất (đó là lý do của tôi đằng sau việc không muốn sử dụng nhiều dbContexts). Sau khi thiết lập mã sau:

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);
    }
}

Tất nhiên, điều này yêu cầu các tệp ánh xạ của tôi phải được thiết lập như vậy:

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

        //Map other properties and stuff
    }
}

Viết truy vấn sử dụng nhiều lược đồ hơi khó chịu nhưng hiện tại, nó thực hiện những gì tôi cần:

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. Một tài liệu tham khảo tốt cho Oracle PL / SQL

  2. PL / SQL không đủ đặc quyền trong một truy vấn có thể theo cách thủ công

  3. Từ Thủ tục đã lưu, trả về tham số OUT &con trỏ OUT &kết quả phân tích cú pháp (Oracle)

  4. Oracle SQL để thay đổi kiểu cột từ số thành varchar2 trong khi nó chứa dữ liệu

  5. Kết quả không có thứ tự trong SQL