На моем веб-сайте я использую ASP MVC 2 + Fluent NHibernate в качестве orm, StructureMap для контейнера IoC.
Есть несколько баз данных с одинаковыми метаданными (и поэтому сущности и отображения одинаковы).На странице входа в систему пользователь вводит логин, пароль, запомнить меня и выбирает свой сервер из выпадающего списка (фактически он выбирает базу данных).
Web.config содержит все константы, и мы можем предположить, что они не будут изменены при запуске-time.
Я полагаю, что для каждой базы данных требуется одна фабрика сеансов.
Перед использованием нескольких баз данных я загрузил классы в свой ObjectMactory StructureMap в 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 я их связываю:
protected void Application_BeginRequest(
object sender, EventArgs e)
{
CurrentSessionContext.Bind(ObjectFactory.GetInstance<ISessionFactory>().OpenSession());
}
Q1: Какя понимаю, что SessionFactory я должен использовать в соответствии с аутентифицированным пользователем?это что-то вроде UserData, заполненное именем базы данных (я использую простую FormsAuthentication)
Для ведения журнала я использую log4net, а именно AdoNetAppender, который содержит connectionString (в xml, конечно).Вопрос 2: Как я могу управлять несколькими строками подключения для этого приложения базы данных, чтобы журналы записывались в текущую базу данных?Я понятия не имею, как это сделать, кроме как постоянно менять xml и сбрасывать конфигурацию xml, но это действительно плохое решение.