sql >> Database >  >> RDS >> Oracle

Entity Framework en meerdere schema's

Terwijl ik wat onderzoek deed naar Entity Framework kwam ik het volgende bericht tegen:

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

Het geeft me niet echt een enkele dbContext om mee te werken, maar het gebruikt slechts een enkele verbinding (wat mijn redenering was om niet meerdere dbContexts te willen gebruiken). Na het instellen van de volgende code:

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

Dit vereist natuurlijk dat mijn kaartbestanden als volgt zijn ingesteld:

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

        //Map other properties and stuff
    }
}

Het schrijven van query's die meerdere schema's gebruiken, is enigszins vervelend, maar op dit moment doet het wat ik nodig heb:

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. Maak een nieuwe tabel door gegevens uit andere tabellen te selecteren met CREATE TABLE AS

  2. Hoe de fout door nul te delen in SQL vermijden?

  3. mysql twee kolommen primaire sleutel met automatische verhoging

  4. Stel een standaard openbaar profiel in voor databasemail (SSMS)