Entity Framework и миграция с несколькими схемами в одном контексте

c# ef-code-first entity-framework entity-framework-6

Вопрос

Я разрабатываю приложение с несколькими арендаторами с Entity Framework Code First. Каждый арендатор будет иметь другую схему в базе данных, но приложение будет иметь один Контекст и модель для всех арендаторов.

Entity Framwork 6 может использовать несколько схем с несколькими контекстами в одной базе данных, но я не нашел способ использовать несколько схем с одним Контекстом.

Я сгенерировал миграцию (по командной строке) по схеме «dbo» по умолчанию. Я хотел бы обновить другие схемы, используя эти миграции.

Популярные ответы

Хотя я согласен с тем, что множественный контекст является абсолютно лучшим способом (и как у меня есть мои собственные проекты), я хотел ответить на ваш первоначальный вопрос о том, как использовать несколько схем в одном контексте:

Внутри вашей конфигурации отображения для каждой модели вы можете вызвать «ToTable (myTableName, mySchema)», чтобы изменить схему, к которой относится таблица:

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public MyEntityMap ()
    {
        HasKey(t => t.MyId);
        Property(t => t.MyId)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        ToTable("MyEntity", "MySchema");
    }
}

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

Поскольку вы заявили, что хотите использовать ту же модель в разных схемах, что делает ее немного сложнее, не зная больше о вашей настройке. Если вы имеете дело только с несколькими клиентами и не против сохранения их схем в коде, вы можете просто создать карту для каждой схемы (как указано выше), а затем добавить новый DbSet для каждого клиента. Если вы пытаетесь сделать это масштабируемым для большого количества клиентов, то я бы предложил предложить другой подход, потому что ваш dba мог бы кричать, когда он видел более 100 идентичных таблиц в разных схемах, а не используя столбец customerID для каждой таблицы ,



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему