У меня проблема с работой с EF Core. Я хочу разделить данные для разных компаний в базе данных моего проекта с помощью схемы-механизма. Мой вопрос в том, как я могу изменить имя схемы во время выполнения? Я нашел similar question об этой проблеме, но она по-прежнему остается без ответа, и у меня есть разные условия. Поэтому у меня есть Resolve
метод, который предоставляет DB-контекст, когда необходимыйДинамически меняющаяся схема в Entity Framework Core
public static void Resolve(IServiceCollection services) {
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<DomainDbContext>()
.AddDefaultTokenProviders();
services.AddTransient<IOrderProvider, OrderProvider>();
...
}
Я могу установить имя-схемы в OnModelCreating
, но, как было обнаружено, прежде чем, этот метод вызывается только один раз, так что я могу установить имя схемы globaly здесь как что
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("public");
base.OnModelCreating(modelBuilder);
}
или прямо в модели с помощью атрибута, как этот
[Table("order", Schema = "public")]
public class Order{...}
Но как я могу изменить имя схемы во время выполнения? Я создаю контекст ef для каждого запроса, но, во-первых, я выхожу из имени схемы для пользователя через запрос в какую-то таблицу с общей схемой в базе данных. Итак, каков истинный способ организации этого механизма:
- Вывести имя схемы по учетным записям пользователя;
- Получите данные, специфичные для пользователя, из базы данных из конкретной схемы.
спасибо.
P.S. Я использую PostgreSql, и это является причиной наименьшего имени таблицы.
Как я уже писал выше, в «OnModelCreating» нет проблемы с именем схемы сеанса, проблема заключается в том, что этот метод называется только один раз, поэтому следующий созданный контекст будет иметь ту же схему. Но, может быть, я пропустил что-то важное в вашем ответе? – user3272018
Я получил вашу точку зрения, вы правы, мой предыдущий ответ не включает решение проблемы OnModelCreating, но я искал в блогах решение для этой проблемы, и я нашел код для метода OnConfiguring, я изменил свой ответ, пожалуйста, проверьте это и дайте мне знать, если это полезно [link] (https://github.com/Grinderofl/FluentModelBuilder/issues/9) –
Это может работать для небольших проектов, но я не могу представить, как поддерживать метод MapProduct для сотен таблиц, не говоря уже о все возможные настройки и миграции ... –