2012-02-14 2 views
2

Je développe une application qui va séparer les données client dans différents schémas dans MS SQL Server 2008. La structure de la table est la même pour chaque schéma. Entity Framework 4.1 sera utilisé pour accéder aux données, en utilisant une chaîne de connexion différente par client. L'utilisateur dans la chaîne de connexion est configuré pour utiliser un schéma particulier dans la base de données et ce n'est pas un problème. Le problème que je rencontre est que le nom du schéma dans les requêtes est codé en dur dans l'EDMX. si je supprime le nom de schéma de chaque entité dans le fichier .edmx, .NET utilise à la place le nom EntityContainer. Comment peut-on changer le nom de ce schéma par connexion? J'utilise un DbContext générique pour établir mes connexions avec une chaîne de connexion fournie par requête.Entity Framework Change Schema Nom par connexion

J'ai essayé Brandon Haynes EF ModelAdapter sur codeplex mais cela ne semble pas fonctionner contre la dernière version de EF. Toute aide est appréciée!

Répondre

2

La résolution avec EDMX + DbContext sera probablement difficile car la seule façon est d'avoir un SSDL séparé pour chaque schéma. SSDL fait partie de votre fichier EDMX et c'est la partie où toutes les tables sont définies, y compris le nom de leur schéma. Vous pouvez changer SSDL à l'exécution (il est juste XML par défaut stocké comme ressource de votre assembly) mais vous devrez créer manuellement MetadataWorkspace pour chaque schéma, l'utiliser pour créer EntityConnection et passer la connexion au constructeur de contexte.

EF ModelAdapter est basé sur ObjectContext. Vous devrez donc utiliser l'API ObjectContext (.NET 4.0) au lieu de l'API DbContext si vous souhaitez l'utiliser. Si vous passez au mappage de code (pas d'EDMX mais une API fluide utilisée pour décrire le mappage), il sera possible de le réaliser car vous pourrez paramétrer votre ensemble de mappage unique et utiliser plusieurs instances DbModel (une par schéma).

Questions connexes