i also prefer loading the mapping files as embedded resources in an assembly. You could put the name of the assembly containing the mappings in your application configuration file, and then let NHibernate load the assembly that you've specified in the config file
for instance:
Code:
Configuration cfg = new Configuration()
.AddAssembly(GetAssemblyNameFromConfig());
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
this way, all you need to do is specify the assembly containing your database specific mappings in your config file. If you know that one deployment always uses a specific database mapping, this approach should be sufficient.
If however, you need your deployed application to switch between multiple database mappings at runtime you'll need to do something else.... perhaps specify all of the possible mapping assemblies in your config file, and then provide a way to switch between different SessionFactories... (one for legacy db1, one for legacy db2, ...). You'd still avoid hardcoding filenames in your code, they'd all be in the application configuration file. Constructing each sessionfactory is expensive though, so you'd only want to do this once... for a web application this isn't really a problem but if it's a winforms app, your users will have to get accustomed to a slow start up time :S