2011-07-12 3 views
2

Avec le framework d'entité, est-ce que je peux, disons assez haut dans le jeu de piles, quelle base de données je veux connecter, et puis utiliser EF pour toutes les requêtes? Ce n'est pas un scénario où vous avez un DB différent par modèle, mais plutôt tous les modèles se connectent à la même base de données, mais cette base de données pourrait être différente en fonction de certains critères (comme l'URL ou un sous-domaine). .Entity Framework 4 prend-il en charge plusieurs bases de données?

Si oui, quelles conséquences cela aurait-il sur la mise en commun de la base de données, etc.?

Répondre

1

Lorsque vous créez votre ObjectContext, un paramètre pour le constructeur est la chaîne de connexion:

http://msdn.microsoft.com/en-us/library/bb739017.aspx

Il devrait y avoir aucune incidence sur la mise en commun.

+0

est quelque chose ObjectContext qui est mis à l'échelle mondiale avant déclenchement d'une action, puis fermé? c'est-à-dire que je peux le faire une fois par demande? – codecompleting

+0

Eh bien, les contextes d'objets ne devraient pas être partagés entre les threads et devraient généralement avoir une durée de vie courte (par unité de travail) ... puis ils sont éliminés. Donc, oui, c'est (la chaîne de connexion) quelque chose que vous pourriez changer pour chaque création d'un ObjectContext. – Jeff

+0

donc le créer et le détruire et le début/fin de la demande de la page est en sécurité alors non? meilleur entrainement? (comme dans MVC avant/après l'exécution d'une action) – codecompleting

1

Oui, vous pouvez le faire. Il s'agit simplement d'utiliser la chaîne de connexion appropriée lors de la création de votre ObjectContext, qui vous connecte à la base de données que vous souhaitez utiliser. Nous le faisons fréquemment.

+0

Mais je suppose exacte même base de données (-schema), pas un passage de MS-SQL à Oracle? –

+2

Correct. Le fournisseur est spécifié dans le fichier SSDL qui est compilé dans l'assembly. Si vous souhaitez effectuer ce changement, vous pouvez modifier l'action de compilation edmx à copier dans le dossier de sortie et basculer manuellement le ssdl pour utiliser un fournisseur différent au moment de l'exécution. Plus ici http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx – Jeff

1

Chaque fois que vous utilisez votre DbContext, vous pouvez simplement changer la connectionString avant de faire des requêtes.

Par exemple, vous pouvez simplement changer le nom du catalogue initial:

YourDbContext.Database.Connection.ConnectionString = "data source=LAPKEVIN\\SQLKEVIN;Integrated Security=SSPI;Initial Catalog=YourDatabase"; 
Questions connexes