У меня есть один экземпляр веб-приложения, связанного с несколькими базами данных. Основываясь на доменном имени (например, www.shop1.com, www.shop2.com, ..) Я переключаю строку подключения в Entity Framework.Переключение Sql Сессия Базы данных состояния
shop1.com -> Database1
shop2.com -> Database2
shop3.com -> Database3
Пока все хорошо.
Я также использую состояние сеанса сервера Sql, и я хочу переключить базу данных состояния сеанса так же, как я переключу базу данных для своих данных.
shop1.com -> SessionStateDatabase1
shop2.com -> SessionStateDatabase2
shop3.com -> SessionStateDatabase3
Заранее за вашу помощь.
Более подробную информацию, если вы хотите знать, почему я это делаю:
На самом деле я реализую мульти-договор аренды. В приведенном выше описании показаны три сайта. На самом деле, у меня более 50. И количество сайтов будет расти в ближайшие несколько месяцев. На данный момент все сайты разворачиваются отдельно, что означает, что всякий раз, когда мне приходится запускать патч или обновление, я развертываю все 50 сайтов. Поддержание сайтов таким образом становится кошмаром. Поэтому я думал о размещении от 5 до 10 сайтов в одном экземпляре, в зависимости от их использования, так что у меня осталось меньше экземпляров для поддержки.
Спасибо @fejesjoco. Я определенно буду смотреть на нее на следующей неделе, поскольку это кажется довольно многообещающим. – Oxon
Я сомневаюсь, что есть другой хороший способ сделать это, и это поддерживается и приятно. Реализация IPartitionResolver - не самая простая задача, потому что вам необходимо сопоставить идентификаторы сеанса с цепочками соединений. Поэтому, если вы хотите принять решение на основе имени домена, вам нужно каким-либо образом сопоставить имена доменов с идентификатором сеанса. Либо вы храните это сопоставление где-нибудь (в событии Global Session_Start), либо ... Самый простой трюк, который я могу придумать, - это использовать пользовательский ISessionIDManager и поместить идентификатор базы данных непосредственно в идентификатор сеанса. Поэтому, когда вы смотрите на идентификатор сеанса, вы знаете, в какой базе данных он находится. – fejesjoco