De manière dynamique l'évolution de schéma dans le Cadre de l'Entité de Base

UPD ici est la façon dont j'ai résolu le problème. Même si c'est probablement pas le meilleur, il a travaillé pour moi.


J'ai un problème avec le travail avec les EF de Base. Je veux séparer les données pour différentes sociétés dans mon projet de base de données via un schéma du mécanisme. Ma question est comment je peux changer le nom du schéma dans runtime? J'ai trouvé question similaire sur cette question, mais il est encore ananswered et j'ai quelques conditions différentes. J'ai donc Resolve méthode qui accorde db-contexte si nécessaire

public static void Resolve(IServiceCollection services) {
    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<DomainDbContext>()
        .AddDefaultTokenProviders();
    services.AddTransient<IOrderProvider, OrderProvider>();
    ...
}

Je peux définir un schéma nom dans OnModelCreating, mais, comme l'a montré avant, cette méthode est appelée une seule fois, afin que je puisse régler le nom du schéma globalement ici comme ça

protected override void OnModelCreating(ModelBuilder modelBuilder) {
    modelBuilder.HasDefaultSchema("public");
    base.OnModelCreating(modelBuilder);
}

ou la droite dans le modèle via un attribut comme ça

[Table("order", Schema = "public")]
public class Order{...}

Mais comment puis-je changer le nom du schéma dans runtime? J'ai créer ef du contexte pour chaque demande, mais tout d'abord je fugure de sortir du schéma de nom d'utilisateur par l'intermédiaire de la demande pour certains au schéma de la table partagée dans la base de données. Alors, quelle est la vraie manière d'organiser ce mécanisme:

  1. Comprendre le nom du schéma de l'utilisateur des informations d'identification;
  2. Obtenir des données spécifiques à l'utilisateur de la base de données de schéma spécifique.

Merci.

P. S.-je utiliser PostgreSql et c'est une raison de lowecased nom de la table.

vous pouvez poster la solution que vous avez fait avec le IModelCacheKeyFactory?
Je l'ai fait, mais s'il vous plaît, prenez soin avec elle. stackoverflow.com/a/50529432/3272018

OriginalL'auteur user3272018 | 2016-09-14