Ответы пользователя по тегу Entity Framework
  • Как реализовать подписку юзеров на других?

    igolets
    @igolets
    Программист C#, MSSQL
    Это нужно погуглить по ключевым словам "entity framework many to many fluent".

    // к User добавить 
            // Subscribers
            public ICollection<UserSubscriptions> Subscribers { get; set; }
    
    // при конфигурировании датаконтекста использовать следующий fluent синтаксис
    modelBuilder.Entity<User>()
       .HasMany(u => u.Subscriptions)
       .WithMany(u => u.Subscribers)
       .Map(cs =>
       {
           cs.MapLeftKey("UserId");
           cs.MapRightKey("SubsUserId");
           cs.ToTable("UserSubscriptions");
       });
    Ответ написан
    Комментировать
  • Это оптимальный способ фильтрации записей из таблицы с помощью Entity Framework?

    igolets
    @igolets
    Программист C#, MSSQL
    Я как-то обычно пишу код чуть проще:
    var query = _dbContext.Products.AsQueryable();
                if (request.ProductGroups?.Length > 0)
                {
                    query = query.Where(x => request.ProductGroups.Any(y => y == x.ProductGroup));
                }
                if (request.SupplierIds?.Length > 0)
                {
                    query = query.Where(x => request.SupplierIds.Any(y => y == x.SupplierId));
                }
                if (request.Categories?.Length > 0)
                {
                    query = query.Where(x => request.Categories.Any( y => y == x.Category));
                }
    
    
                return Task.FromResult(_mapper.ProjectTo<ProductDto>(query));


    Общие замечания к коду:
    1. Есть ограничения по размеру запроса, если ProductGroups и Categories будут иметь длинные названия, могут быть исключения в рантайме
    2. Надо внимательно подумать на счёт ProductGroups и Categories и используемого движка БД — на предмет CaseSensitive и CaseInsensitive сравнений. Могут тоже быть приколы — когда запись из БД вернулась (там CaseInsensitive), а какой-то код на стороне C# не принял эту запись и упал (CaseSensitive).
    3. Соответственно, как предложение на подумать — нормализовать ProductGroups и Categories в отдельные таблицы ;)
    Ответ написан
    Комментировать
  • Как обновлять не создавая связанные данные добавляемой сущности при соединении ManyToMany (EF CORE 5)?

    igolets
    @igolets
    Программист C#, MSSQL
    Боюсь, придется сбегать в БД и получить объекты БД для тех тэгов, которые уже есть в базе. Либо сохранять через хранимку и в ней уже проверять, есть такой тэг в базе, или нет.
    Ответ написан
    Комментировать