Хотя я согласен с тем, что несколько контекстов — это абсолютно лучший способ (и именно так я настраиваю свои собственные проекты), я хотел ответить на ваш первоначальный вопрос о том, как использовать несколько схем в одном контексте:
Внутри вашей конфигурации сопоставления для каждой модели вы можете вызвать «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 для каждого клиента. Если вы пытаетесь сделать это масштабируемым для большого количества клиентов, я настоятельно рекомендую изучить другой подход, потому что ваш администратор базы данных может закричать, когда увидит более 100 идентичных таблиц в разных схемах, а не использовать столбец идентификатора клиента в каждой таблице. .
person
Robert Petz
schedule
16.07.2013