На моем веб-сайте я использую ASP MVC 2 + Fluent NHibernate как orm, StructureMap для контейнера IoC.Одиночный веб-сайт с несколькими строками с использованием asp mvc 2 и nhibernate
Существует несколько баз данных с идентичными метаданными (и поэтому сущности и сопоставления являются одинаковыми). На странице LogOn пользователь фиксирует логин, пароль, запоминает и выбирает свой сервер из выпадающего списка (фактически он выбирает базу данных).
Web.config содержит все connstrings, и мы можем предположить, что они не будут изменены во время выполнения.
Я полагаю, что для каждой базы данных требуется одна фабрика сеансов.
Перед использованием нескольких баз данных, я загружен классы в мое StructureMap ObjectFactory в Application_Start
ObjectFactory.Initialize(init => init.AddRegistry<ObjectRegistry>());
ObjectFactory.Configure(conf => conf.AddRegistry<NhibernateRegistry>());
NhibernateRegistry класс:
public class NhibernateRegistry : Registry
{
public NhibernateRegistry()
{
var sessionFactory = NhibernateConfiguration.Configuration.BuildSessionFactory();
For<Configuration>().Singleton().Use(
NhibernateConfiguration.Configuration);
For<ISessionFactory>().Singleton().Use(sessionFactory);
For<ISession>().HybridHttpOrThreadLocalScoped().Use(
ctx => ctx.GetInstance<ISessionFactory>().GetCurrentSession());
}
}
В Application_BeginRequest я связываю открыл NHibernate сессии Asp сеанс (NHibernate сессии для каждого запроса) и в EndRequest i развязать их:
protected void Application_BeginRequest(
object sender, EventArgs e)
{
CurrentSessionContext.Bind(ObjectFactory.GetInstance<ISessionFactory>().OpenSession());
}
Q1: Как я могу понять, что должен использовать SessionFactory в соответствии с аутентифицированным пользователем? - это что-то вроде UserData, заполненного именем базы данных (я использую простое FormsAuthentication)
Для регистрации я использую log4net, а именно AdoNetAppender, который содержит connectionString (в xml, конечно). Q2: Как я могу управлять несколькими строками подключения для этого приложения базы данных, поэтому журналы будут записываться в текущую базу данных? Я не знаю, как это сделать, кроме изменения xml все время и перепродажи xml-конфигурации, но это действительно плохое решение.
Ваше решение звучит очень убедительно, попробуйте в течение нескольких дней. Кэш второго уровня не является существенным. – jjjjj