If alls DBs has the same set of domain-entities what you need is a
IConnectionProvider to dinamically change the connection to a specific
DB.
Have a look to the "how to" wiki on nhforge.org and you will find the
implementation

--
Fabio Maulo


El 14/10/2010, a las 10:57, Maorino <[email protected]> escribió:

> Hi,
>
> As part of my system initialization i have to connect to a large
> number of databases (over 20).
> I created a class, factory of session factory, that according to a
> unique key will return a session factory.
>
> I use a default NHibernate config file, load it, and change all the
> things according to each key in that collection (change the connection
> string, change the mapping assemblies, cache region name etc.)
>
> This initialization takes a huge amount of time (about 3.5 minutes to
> connect to 10 databases).
> After a small research, i found out that what's taking so long, is
> when i add the mapping assemblies to the configuration (i have about
> 10 asseblies to each database, but they are the same for each
> database... so maybe there's something i can do in here?!), and the
> cfg.BuildSessionFactory() takes only 2-3 seconds.
>
> Is there a way i can significantly reduce the time for adding the
> assemblies to the configuration (cfg.AddAssembly(assembly.Name)) ?
>
> BTW,
>
> It doesn't matter if i dynamicly add the assemblies or add them as
> part of the default configuration.
>
> Thanks in advance,
>
> Here is the code that creates one unit of work factory according to
> the configuration it recieves as a parameter:
>
> private ISessionFactory createUnitOfWorkFactory(UnitOfWorkKey
> sessionFactoryKey, UnitOfWorkFactoryElement factoryElement, bool
> isFromConfigurationFile)
>        {
>            try
>            {
>                ISessionFactory sessionFactory;
>
>                NHibernateConfiguration cfg = new
> NHibernateConfiguration();
>
>                // Add the connection string according to the database
> type specified in the key
>                Dictionary<string, string> properties = new
> Dictionary<string, string>();
>
>                if (!File.Exists(factoryElement.FactoryConfigPath))
>                {
>                    throw new FileNotFoundException(
>                         formatException("The config file at '" +
> factoryElement.FactoryConfigPath + "' could not be found",
> sessionFactoryKey));
>                }
>
>                string connectionString =
> factoryElement.ConnectionString;
>
>                // The configuration file doesn't contain concrete
> connection but a connection name that need to be fetched
>                // from configuration
>                if (isFromConfigurationFile)
>                {
>                    // Fetch the connection string according to it's
> name from the configuration settings
>                    ConnectionStringSettings connectionSettings =
>
> ConfigurationManager.ConnectionStrings[factoryElement.ConnectionString];
>
>                    if (connectionSettings == null)
>                    {
>                        throw new HibernateException(formatException
>                            (string.Format("Could not find named
> connection string {0}", factoryElement.ConnectionString),
>                             sessionFactoryKey));
>                    }
>
>                    connectionString =
> connectionSettings.ConnectionString;
>                }
>                properties.Add(NHibernateEnvironment.ConnectionString,
> connectionString);
>
> properties.Add(NHibernateEnvironment.CacheRegionPrefix,
> factoryElement.CacheRegionName);
>
>                cfg.AddProperties(properties);
>
>                // Add the assemblies of the entities according to the
> configuration file
>                cfg.Configure(factoryElement.FactoryConfigPath);
>                addMappingAssemblies(ref cfg);
>                //  Now that we have our key object, create a new
> SessionFactory
>                sessionFactory = cfg.BuildSessionFactory();
>
>                if (sessionFactory == null)
>                {
>                    throw new
> InvalidOperationException(formatException("cfg.BuildSessionFactory()
> returned null.", sessionFactoryKey));
>                }
>
>                return sessionFactory;
>            }
>            catch (Exception exp)
>            {
>                Logger.Logger.WriteLog(Severity.Fatal, this, "Error
> while trying to build unit of work factory", exp);
>                return null;
>            }
>        }
>
>
> Maorino.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/nhusers?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to