UPD вот как я решил проблему. Хотя это, вероятно, не самый лучший, это сработало для меня.
У меня проблема с работой с EF Core. Я хочу разделить данные для разных компаний в базе данных моего проекта с помощью механизма схемы. У меня вопрос, как я могу изменить имя схемы во время выполнения? Я нашел похожий вопрос об этой проблеме, но он все еще остается без ответа, и у меня есть некоторые другие условия. Таким образом, у меня есть метод Resolve
который предоставляет db-контекст, когда это необходимо
public static void Resolve(IServiceCollection services) {
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<DomainDbContext>()
.AddDefaultTokenProviders();
services.AddTransient<IOrderProvider, OrderProvider>();
...
}
Я могу установить имя схемы в OnModelCreating
, но, как было обнаружено ранее, этот метод вызывается только один раз, поэтому я могу установить глобальное имя схемы следующим образом
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("public");
base.OnModelCreating(modelBuilder);
}
или прямо в модели через атрибут
[Table("order", Schema = "public")]
public class Order{...}
Но как я могу изменить имя схемы во время выполнения? Я создаю контекст для каждого запроса, но сначала вычеркиваю имя схемы пользователя через запрос к общей таблице схемы в базе данных. Итак, как правильно организовать этот механизм:
- Выяснить имя схемы по учетным данным пользователя;
- Получить пользовательские данные из базы данных из конкретной схемы.
Спасибо.
PS Я использую PostgreSql, и это является причиной низких имен таблиц.