Я пытаюсь использовать глобальные фильтры запросов для реализации многопользовательского режима в веб-приложении ASP.NET Core.На данный момент у меня есть отдельная база данных для каждого арендатора, и я настраиваю контекст в файле startup.cs следующим образом:
services.AddDbContext<dbcontext>((service, options) =>
options.UseSqlServer(Configuration[$"Tenant:{service.GetService<ITenantProvider>().Current}:Database"])
.ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning)),
contextLifetime: ServiceLifetime.Scoped, optionsLifetime: ServiceLifetime.Scoped);
Это отлично работает.Теперь заказчику больше не нужна отдельная база данных для каждого арендатора, поэтому я добавил столбец teanntId
к каждой таблице и хочу использовать глобальные фильтры запросов для реализации этого.
Как описано в документации , я могу добавить фильтр запросов в методе OnModelCreating
:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().Property<string>("TenantId").HasField("
modelBuilder.Entity<Blog>().HasQueryFilter(b => EF.Property<string>(b, "TenantId") == _tenantId);
}
Но сначала я использую базу данныхподход, поэтому каждый раз, когда я генерирую модель, я теряю эту конфигурацию. Есть ли другой способ настройки глобального фильтра запросов, например, использование DbContextOptionsBuilder
?
Я использую EF Core 2.1.2.