Ich versuche, meine dbContext einzurichten, so dass es mehrere Schemas in einer einzigen Oracle-Datenbank behandeln kann. Ich wollte nicht eine monolithische DbContext Datei, damit ich mit den folgenden habe kommen:Entity Framework und mehrere Schemas
public class oraDbContext : DbContext
{
static oraDbContext() {
Database.SetInitializer<oraDbContext>(null);
}
public oraDbContext(string connName)
: base("Name=" + connName) { }
public _schema1 schema1 = _schema1.Instance;
public _schema2 schema2 = _schema2.Instance;
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
schema1.OnModelCreating(modelBuilder);
schema2.OnModelCreating(modelBuilder);
}
}
Die Schemadatei sieht wie folgt aus:
public sealed class _schema1
{
private static readonly _schema1 instance = new _schema1();
static _schema1() { }
private _schema1() { }
public static _schema1 Instance {
get {
return instance;
}
}
public DbSet<someTable> someTable { get; set; }
internal void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Configurations.Add(new someTableMap());
}
}
Allerdings, wenn ich versuchen, eine Abfrage, die ich ausführen Erhalten Sie den Fehler: Value cannot be null
. Der Wert, auf den es sich bezieht, ist die someTable
-Eigenschaft in _schema1.
A. Wie kann ich das beheben?
B. Gibt es eine bessere Lösung?
Edit: Was ich hier will, ist die Möglichkeit, Code zu schreiben, wie die folgenden -
var query1 = from p in db.schema1.someTable
select p;
var query2 = from p in db.schema2.someTable
select p;
Wo sometable das gleiche in beiden Schemata ist. In unserer Datenbank haben wir mehrere Schemata mit genau denselben Tabellen, die identische oder fast identische Spalten haben. Ich möchte keinen separaten dbContext für jedes Schema erstellen, da dies möglicherweise 5 verschiedene Verbindungen bedeuten kann, wenn ich eine Abfrage erstelle, die aus 5 Schemas zieht. Wenn ich dieselbe Abfrage in SQL schreiben würde, könnte ich die Daten aus 5 verschiedenen Schemas mit einer einzigen Verbindung abrufen, und das möchte ich hier erreichen.
+1 für die Verwendung von GetOrAdd(), um Code lesbar zu verdichten. Ich möchte nur betonen, dass die Verwendung.ToList(), um Ergebnisse in den beiden Komponenten der Abfrage zusammenzuführen, ist entscheidend, da wir versuchen, Abfragen aus verschiedenen Kontexten zu kombinieren (<- mit Entitätsframework und wahrscheinlich auch anderen Orms, solche Operationen können nicht direkt auf die Datenbank angewendet werden). – xDisruptor