2016-03-03 3 views
0

Nous avons recommandé (par des spécialistes Microsoft) d'utiliser des schémas de base de données dans une seule base de données au lieu de bases de données distinctes pour chaque client de notre service. Nous utilisons actuellement la première approche de base de données. .Base de données Entity Framework Premièrement: se connecter à un schéma de base de données particulier en mode exécution

histoire utilisateur. Quand je me connecte comme un gars de la compagnie 1, à la page « entrepôts j'obtenir des renseignements de u1.Warehouses table Company 2 - u2.Warehouses et ainsi de suite

Question: en ayant schéma le nom d'un utilisateur particulier, comment pouvons-nous établir une connexion à that_schema_name.Table_name en mode d'exécution en utilisant Entity Framework? Merci!

Répondre

0

en fonction de l'utilisateur qui est connecté et son appartenance à des rôles, une entreprise ou tout ce que vous définissez dans votre application, vous pouvez conditionnellement définir le schéma.Bellow j'ai fourni l'échantillon avec Si construction de flux de contrôle et méthode IsInRole de CurrentPrincipal, il ne peut évidemment être votre solution finale, mais devrait vous mettre en piste:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 

    base.OnModelCreating(modelBuilder); 
    if (Thread.CurrentPrincipal.IsInRole("Foo")) 
     modelBuilder.HasDefaultSchema("that_schema_name"); 
    else 
     modelBuilder.HasDefaultSchema("other_schema_name"); 

    ... 
} 
+0

Merci! Nous l'avons déjà essayé. Mais la méthode OnModelCreating semble être utilisée uniquement dans l'approche CodeFirst, nous avons DatabaseFirst. –

+0

Ce n'est pas correct. Vous pouvez également utiliser OnModelCreating avec DatabaseFirst. –

+0

Nous avons essayé votre solution une fois de plus. Malheureusement, le gestionnaire d'événements n'est pas appelé :( –