Entity Framework et plusieurs schémas
Je suis en train de configurer mon dbContext de sorte qu'il peut traiter plusieurs schémas dans une seule base de données Oracle. Je n'en voulais pas un monolithique dbContext fichier alors je suis venu avec les éléments suivants:
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);
}
}
Le schéma de fichier ressemble à ceci:
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());
}
}
Cependant, lorsque j'essaie d'exécuter une requête, j'obtiens l'erreur: Value cannot be null
. La valeur de référence est la someTable
propriété dans _schema1.
A. Comment puis-je résoudre ce problème?
B. Est-il une meilleure solution?
Edit: Ce que je veux ici, c'est la capacité à écrire du code comme le suivant -
var query1 = from p in db.schema1.someTable
select p;
var query2 = from p in db.schema2.someTable
select p;
Où someTable est le même dans les deux schémas. Dans notre base de données nous avons plusieurs schémas, avec les mêmes tables qui sont identiques ou quasi identiques colonnes. Je ne veux pas créer une salle de dbContext pour chaque schéma parce que cela pourrait signifier 5 différentes connexions si je crée une requête qui tire à partir de 5 schémas. Si j'ai écrit ce même requête dans droit en SQL j'ai pu en tirer les données à partir de 5 différents schémas avec une connexion unique et c'est ce que je voudrais faire ici.
OriginalL'auteur Kittoes0124 | 2013-02-15
Vous devez vous connecter pour publier un commentaire.
Tout en faisant quelques recherche sur Entity Framework, je suis tombé sur le post suivant:
http://romiller.com/2011/05/23/ef-4-1-multi-tenant-with-code-first/
Il n'a pas tout à fait donner moi un seul dbContext travailler, mais il ne fait qu'utiliser une seule connexion (ce qui était mon raisonnement ne voulant pas utiliser de multiples dbContexts). Après la configuration, le code suivant:
Bien sûr, cela nécessite que mes fichiers de mappage être mis en place comme suit:
De l'écriture de requêtes qui utilisent plusieurs schémas est un peu ennuyeux, mais, pour le moment, il fait ce que j'ai besoin de le faire:
OriginalL'auteur
Essayez d'utiliser des classes partielles au lieu
oraDbContext already contains a definition for 'someTable'
. Édité question afin de mieux refléter ce que je suis à la recherche pour.OriginalL'auteur
Vous pouvez spécifier le schéma par table via
Table
attribut.OriginalL'auteur