Entity Framework - Conception en couches - Où placer la chaîne de connexion?

c# data-access-layer entity-framework n-tier

Question

J'utilise une architecture en couches avec Entity Framework comme couche de données avec un ensemble de référentiels contenant les requêtes Linq-To-Entities. La couche de données est un projet, à côté de cela, j'ai une couche de services et l'interface, qui est un site Web.

Je veux que mon site Web soit responsable de la spécification de la chaîne de connexion pour mon modèle d'entité. Comment puis-je faire cela?

J'utilise une méthode singleton pour accéder à mon référentiel d'entités, situé à l'intérieur du datalayer.

Merci

Réponse acceptée

Vous pouvez copier la chaîne de connexion créée dans App.Config de l'assembly DAL dans la section connectionStrings du web.config.

Vous pouvez conserver la chaîne de connexion dans la DLL d'assembly mais vous ne devez pas la déployer avec le site Web.

Vous devrez copier toute la chaîne de connexion. Ça devrait ressembler à ça:

<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Il devrait inclure toutes les informations sur l'emplacement des fichiers de mappage.


Réponse populaire

Dans mon cas, bien que j'utilise L2S au lieu de L2E, mais la recommandation devrait être maintenue. J'ai une bibliothèque de généralisation de configuration qui se nourrit d'un fichier XML. Lorsqu'un contexte de données est requis, chaque objet de données a une méthode comme celle-ci. Certes, cela pourrait être assez facile, si vous préférez.

private static string _conStr = null;
private static CalendarsAndListsDataContext GetDataContext()
{
    if (_conStr == null)
    {
        _conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString");
    }

    return new CalendarsAndListsDataContext(_conStr);
}

Maintenant, le plus gros inconvénient est que les changements de chaîne de connexion nécessitent un redémarrage de l'application, mais dans mon cas, ce n'est pas un problème.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi