Tengo una situación en la que me gustaría filtrar tablas por ID de usuario conectado o, para ser exactos, algún campo llamado AllowedVehicles . La cuestión es que identityContext ha llenado el campo AllowedVehicles solo cuando está conectado y después de que la propiedad AllowedVehicles realmente se lea de la base de datos. Mi código no funciona ya que AllowedVehicles es una lista vacía una vez que se ejecuta OnModelCreating y se ejecuta solo una vez .
¿Cómo puedo hacer una consulta de filtro global en este caso?
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyGlobalFilters<IBaseEntity>(x => x.DeletedAt == null); if (_identityContext != null && _identityContext.AllowedVehicles.Count() > 0) { modelBuilder.ApplyGlobalFilters<Vehicle>(x => _identityContext.AllowedVehicles.Select(x => x.Id).Contains(x.Id)); } }OnModelCreating se llama solo una vez por clase DbContext. Y no tiene que esperar que pueda aplicar el filtro condicionalmente.
Una solución es definir sus condiciones en el filtro:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyGlobalFilters<IBaseEntity>(x => x.DeletedAt == null); modelBuilder.ApplyGlobalFilters<Vehicle>(x => _identityContext == null || !_identityContext.AllowedVehicles.Any() || _identityContext.AllowedVehicles.Select(x => x.Id).Contains(x.Id) ); }