2015-04-17 2 views
1

Я ищу лучший способ установить базу данных на основе поддомена с использованием структуры сущности.Entity Framework - установить БД на основе поддомена

  1. Подключение к Master DB с использованием по умолчанию процесса EF
  2. Read суб-домен текущего запроса
  3. Access Master DB прочитать строку подключения в поддомене
  4. Set EF для использования БД поддомена
  5. Все соединения EF теперь должны использовать суб-домен DB

Я не заинтересован в миграции на мастер-DB, но я хочу это работает на суб-доменов.

Это лучшее, что я нашел до сих пор, но мне интересно, если есть более рациональный способ сделать это: https://www.reddit.com/r/dotnet/comments/2t2xlz/entity_framework_multiple_database_single/

+0

Вы используете ASP.NET или MVC? –

+0

Где вы можете найти решение для этого? –

+0

@DawoodAwan Пока нет - я пытаюсь использовать 2 контекста БД и получить доступ к главному контексту из второго контекста. Я буду обновлять, когда/если это будет завершено. – Bob

ответ

0

я в конечном итоге делает следующее, и она работает с миграциями и все:

  • Создать мастер-DB контекста, конфигурации и миграции.
  • Создайте контекст, конфигурацию и миграцию СУБД.
  • На Application_Start выполняется миграция и инициализация основной базы данных.
  • Проведите через каждый поддомен в основной базе данных и перейдите по адресу и выполните инициализацию.
  • На Application_BeginRequest получить текущий поддомен и установить контекстный элемент с поддоменным именем.
  • Теперь основная часть: В вашем контексте DB поддомена, инициализировать конструктор с помощью метода, который будет получить строку подключения из главной базы данных на основе имени поддомена, установленном в контексте пункта.

Помните, что вы можете получить только субдомен, когда запрос отправлен, а не перед началом запроса. Любые вызовы контекста поддомена до вызова Application_BeginRequest приведут к ошибке.

Для вашей инъекции зависимостей в репозитории вы можете установить правильный передаваемый контекст, чтобы он знал, что используется главный контекст или контекст поддомена.

+0

приятно, спасибо, вы используете кеш redis для субдомена хранилища в application_beginrequest? – Rod

1

Вы должны сделать следующие шаги

  1. Создать который всегда ищет метаданные для получения строки контекстного подключения

  2. В контексте вашего db вам нужно будет передать строку соединения, полученную в (1), в качестве соединения вашего объекта

Таким образом, у вас всегда есть строка подключения на основе домена.

НТН

Смежные вопросы