2013-05-01 2 views
0

Я работаю над многопользовательским приложением MVC 4, и я собираюсь использовать одну схему для каждого клиента. Я бы хотел запустить миграцию базы данных в код, когда клиент подписывается. Возможно ли это с использованием EF 5/First First Migrations?Выполнить код первой миграции в коде?

Поэтому, когда клиент подписывается, я создам учетную запись в dbo. Затем я проверю, существует ли их субдомен в качестве схемы в базе данных, а если нет, я создам схему и в идеале буду выполнять миграцию.

Спасибо!

Разъяснение

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

У меня будет схема1.Продукты и схема2.Продукты.

ответ

2

Если я получаю это правильно, что вы хотите ...

Вы могли бы использовать что-то вроде этого

var migrator = new DbMigrator(new Configuration()); 
if (migrator.GetPendingMigrations().Any()) 
    migrator.Update(); 

или даже лучше, вы можете создать свой собственный initializer - например, проверить эти сообщения шахты ...

What is the correct use of IDatabaseInitializer in EF?

How to create initializer to create and migrate mysql database?


Проблема, которую я вижу с вашим подходом является то, что бы вам придется «отдельные» на счет модели/базы данных - и тот, который вы пытаетесь перенести. Поскольку вы упомянули многопользователя, что может быть уже так.

Но я думаю, вы могли бы также создать «базовые объекты» для учетных записей и т. Д., А затем перенести остальные на верх. Это немного сложный сценарий - модель создается один раз (за соединение) при запуске (первое использование) и кэшируется с этого момента. Так что единственное, что было бы для перезагрузки перезагрузки, я думаю (не держите слово за это, просто задумываясь здесь)

+0

Я думаю, что мне нужно использовать миграции для базовых объектов, таких как Учетные записи и затем запустите SQL-скрипты, чтобы создать схему и другие таблицы, специфичные для схемы. Было бы неплохо иметь два разных класса миграции. – Mike

+0

, который эффективно отвечает на ваш основной вопрос Q (с помощью пользовательского инициализатора), но все остальное слишком специфично, я едва могу сказать вам что-нибудь разумное больше, чем я уже делал. Что касается 'two different ...', то миграции в основном являются «singleton» (миграции == your Configuration + scripts + connection + Db + __MigrationHistory sys table). Я думаю, что у вас может быть две в две библиотеки, но вам придется иметь «два db-s» (причина миграции таблицы в db). Это не мульти-арендатор (он входит в EF6). – NSGaga

0

Не уверен, если это то, что вы просите, вы можете запустить код миграции из командной строки:

packages\EntityFramework.5.0.0\tools\migrate.exe Example.dll /startUpDirectory:Example\bin 

Таким образом, в теории вы могли бы назвать это всякий раз, когда новый клиент подписался.

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