0

J'ai un projet Web MVC qui fait référence à un projet de bibliothèque de classes qui contient mes niveaux de domaine et de persistance. J'utilise nHibernate pour mon OR/M. Depuis que j'ai plusieurs bases de données pour se connecter à, j'initialiser ma session-usines en spécifiant les noms de fichiers:Impossible de localiser mon fichier de configuration nhibernate lors du débogage de mon application Web MVC

var config = new Configuration().Configure(nHibernateCfgFileName) 

LA QUESTION: Lorsque je tente de déboguer mon projet MVC, je reçois une erreur disant qu'il n'est pas capable de trouver les fichiers de configuration de nHibernate (les fichiers sont configurés sur "Copy Always" pour les répertoires de sortie). J'ai essayé:

var x = Assembly.GetExecutingAssembly().Location; 
var y = Assembly.GetEntryAssembly().Location; 
var z = Assembly.GetCallingAssembly().Location; 

Mais le retour au-dessus de retour "C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files ....", et je l'ai vérifié que les fichiers de configuration ne sont pas copiés dans ces emplacements temporaires (mais qu'ils se trouvent à l'emplacement bin \ Debug). Quelqu'un peut-il m'aider s'il vous plaît à obtenir mes fichiers de configuration?

Répondre

0

Ahh, en changeant .Localisation à .CodeBase semblait faire l'astuce:

var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
0

Pas exactement une solution à votre problème, mais j'ai utilisé ce modèle pour plusieurs bases de données en utilisant NHibernate, http://codebetter.com/blogs/karlseguin/archive/2009/03/30/using-nhibernate-with-multiple-databases.aspx.

Je chargé mes chaînes de connexion à partir du fichier de configuration plutôt que de la base de données en remplaçant cette ligne:

var dataBases = _globalSessionFactory.OpenSession().CreateQuery("from DataBases").List<DataBases>(); 

avec ceci:

var dataBases = GetDatabaseList(); 

private static IList<DataBase> GetDatabaseList() { 
    var databases = new List<DataBase>(); 
    int numberOfDatabases = ConfigurationManager.AppSettings["NumberOfDatabases"].ToInt(); 
    for(int i = 1; i <= numberOfDatabases; i++) 
    databases.Add(new DataBase 
        { 
         Identifier = ConfigurationManager.AppSettings["DatabaseName" + i], 
         ConnectionString = ConfigurationManager.AppSettings["ConnectionString" + i] 
        }); 
    return databases; 
}