2014-09-07 3 views
1

Используя MVC5 с EF6, я пытаюсь префикс всех имен таблиц приложений, чтобы я мог разместить 2 приложения в одну базу данных и позволить им работать полностью по отдельности. Мне нужны два разных набора пользователей/ролей/претензий/и т. Д., Поэтому я не могу использовать те же имена таблиц AspNet, которые уже существуют из другого приложения.Префикс ВСЕ Имена таблиц в EF6

После прочтения this SO question, я нашел ответ:

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     modelBuilder.Types().Configure(c => c.ToTable("prefix_" + c.ClrType.Name)); 
} 

Это приводит к ошибкам при помощи Add-миграции, так что мне пришлось добавить

base.OnModelCreating(modelBuilder); 

моему методу, чтобы подавить ошибки.

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Types().Configure(c => c.ToTable("prefix_" + c.ClrType.Name)); 

} 

Однако, добавить ли я эту строку, либо выше, либо ниже моего кода конфигурации типа, таблицы записи ASPNET не меняют имена на всех. Это похоже на то, что строка конфигурации типа полностью игнорируется.

Это изменяет имя просто отлично, однако, если я так:

modelBuilder.Entity<ApplicationUser>().ToTable("SomeFunkyTableName"); 

Это, конечно, лишь изменяет таблицу AspNetUsers. Я даже не знаю, какие модели указать для изменения остальных.

Моя общая цель состоит в том, чтобы иметь следующие таблицы, и предпочтительно не должны вручную назначить их: prefix_AspNetRoles prefix_AspNetUserClaims prefix_AspNetUserLogins prefix_AspNetUserRoles prefix_AspNetUsers

В дополнение к этому, я хочу все другие таблицы мой код- сначала создается тот же префикс. Как я могу это сделать? Почему мой код игнорируется?

ответ

3

Вместо префикса таблиц почему бы не использовать схему?

Вы можете использовать следующие параметры для схемы по умолчанию

modelBuilder.HasDefaultSchema("MySchema"); // Replace MySchema with the name of your prefix 

Чтобы установить схему для каждой таблицы можно использовать

modelBuilder.Entity<ApplicationUser>().ToTable("SomeFunkyTableName", "MySecondSchema"); 
+0

Спасибо. Хорошая идея, и она отлично работает. Не использовать SQL Server, поэтому схемы для меня новы. Обычно я должен префикс имен таблиц. – damccull

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