Size: a a a

var chat = new Chat();

2020 July 02

YM

Yury Morozov in var chat = new Chat();
public static void ApplyConfiguration(this ModelBuilder modelBuilder)
       {
           modelBuilder.HasDefaultSchema("dbo");
           foreach (var tp in modelBuilder.Model.GetEntityTypes().ToList())
           {
               var t = tp.ClrType;

               if (typeof(ITenantEntity).IsAssignableFrom(t))
               {
                   var method = SetTenantProperties.MakeGenericMethod(t);
                   method.Invoke(modelBuilder, new object[] { modelBuilder });
               }
     
           }
       }
источник

YM

Yury Morozov in var chat = new Chat();
public static void SetTenantEntity<T>(ModelBuilder builder) where T : class, ITenantEntity
       {
           builder.Entity<T>().Property<int?>("OrganizationId");
           builder.Entity<T>().HasOne<Organization>().WithMany().HasForeignKey("OrganizationId").OnDelete(DeleteBehavior.Restrict);
       }
источник

YM

Yury Morozov in var chat = new Chat();
Ну и посмотрите HasQueryFilter
источник

YM

Yury Morozov in var chat = new Chat();
Соответственно в ваш DbContext инжектится OrganizationId, и у вас автоматом на все сущности с ITenantEntity вешается HasQueryFilter
источник

YM

Yury Morozov in var chat = new Chat();
Ну и соответственно вы даже не узнаете, что есть записи не вашего тинанта
источник

BS

Boris Shirokolov in var chat = new Chat();
Yury Morozov
Ну и соответственно вы даже не узнаете, что есть записи не вашего тинанта
Такой путь к записи решается флагом в роли. Это работает этом способе?
источник

YM

Yury Morozov in var chat = new Chat();
А так, EF DbSet<T> это типичнейший репозиторий. И меня крайне веселят люди, которые навешивают его в свой костыльный репозиторий
источник

BS

Boris Shirokolov in var chat = new Chat();
То есть есть директор с ролью "видно"
источник

YM

Yury Morozov in var chat = new Chat();
Boris Shirokolov
Такой путь к записи решается флагом в роли. Это работает этом способе?
Без разницы
источник

YM

Yury Morozov in var chat = new Chat();
Если у вас в DbContext заинжектены данные о пользователе
источник

YM

Yury Morozov in var chat = new Chat();
То вы как-бы можете делать фильтры.
источник

YM

Yury Morozov in var chat = new Chat();
Причем, я сейчас уже не помню, но их можно делать не статичными
источник

YM

Yury Morozov in var chat = new Chat();
Т.е. изменив видно на не видно запросы пойдут другие
источник

BS

Boris Shirokolov in var chat = new Chat();
А как быть с планом запроса? Если я выбрал ид - надо сначала запись, а потом проверку. В других случаях наоборот. Это на откуп оптимизатора бд?
источник

BS

Boris Shirokolov in var chat = new Chat();
Переслано от Yury Morozov
Т.е. изменив видно на не видно запросы пойдут другие
источник

YM

Yury Morozov in var chat = new Chat();
Не понял вопроса? HasQueryFilter добавляет автоматически Where с вашим условием на все запросы. Если это не нужно, его можно игнорить
источник

BS

Boris Shirokolov in var chat = new Chat();
Boris Shirokolov
Переслано от Yury Morozov
Т.е. изменив видно на не видно запросы пойдут другие
Да. Но признак Видно/нет работает на определенную цепочку таблиц. Это возможно?
источник

YM

Yury Morozov in var chat = new Chat();
То, что ты написал про SQL работает не  так
источник

YM

Yury Morozov in var chat = new Chat();
Не важно где id=5
источник

YM

Yury Morozov in var chat = new Chat();
SQL сначала надет эту запись, и только их сджойнит
источник