Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

इकाई फ्रेमवर्क और एकाधिक स्कीमा

एंटिटी फ्रेमवर्क के बारे में कुछ शोध करते समय मुझे निम्नलिखित पोस्ट का पता चला:

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

यह मुझे काम करने के लिए एक एकल डीबीकॉन्टेक्स्ट नहीं देता है लेकिन यह केवल एक कनेक्शन का उपयोग करता है (जो एकाधिक डीबीकॉन्टेक्स्ट का उपयोग नहीं करना चाहता था)। निम्नलिखित कोड सेट करने के बाद:

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

यह निश्चित रूप से आवश्यक है कि मेरी मैपिंग फाइलें इस तरह स्थापित की जाएं:

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

        //Map other properties and stuff
    }
}

एकाधिक स्कीमा का उपयोग करने वाले प्रश्न लिखना कुछ हद तक कष्टप्रद है, लेकिन फिलहाल, यह वही करता है जो मुझे करने की आवश्यकता है:

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. INSERT विवरण पर मान्य माह नहीं है

  2. R12.2 ऑनलाइन पैचिंग तैयारी रिपोर्ट

  3. इकाई ढांचे के माध्यम से ओरेकल डेटाबेस के लिए स्वचालित रूप से पहचान कैसे उत्पन्न करें?

  4. Oracle पर SYSDATE के लिए UTC मान कैसे प्राप्त करें?

  5. ORA-12514 TNS:श्रोता वर्तमान में कनेक्ट डिस्क्रिप्टर में अनुरोधित सेवा के बारे में नहीं जानता है