1. Включите логирование запросов
https://www.entityframeworktutorial.net/efcore/log...
2. Получите ваш запрос
3. Посмотрите план исполнения в Management Studio
4. Добавьте индексы на таблицу
5. При необходимости смените тип поля с Nvarchar(MAX) на Nvarchar(100) аттрибут [MaxLength(100)]
6. Поиграйтесь порядком context.Users.Where(x=>x.Name == name && x.Age == age) context.Users.Where(x=>x.Age == age && x.Name == name)
7. Добавьте индексы в management studio посмотрите что получилось (запрос должен быть доли секунды)
8. Добавьте создание индексов в модель
https://docs.microsoft.com/ru-ru/ef/core/modeling/...
public class User
{
[Key]
public int Id { get; set; }
public int Age { get; set; }
[MaxLength(60)]
public string Name { get; set; }
[MaxLength(20)]
public string Status { get; set; }
public override string ToString() => $"id: {Id} Name: {Name} Age: {Age} Status: {Status}";
}
public class UserContext : DbContext
{
public static readonly ILoggerFactory LoggerFactory
= new LoggerFactory(new[] {
new ConsoleLoggerProvider((category, level) =>
category == DbLoggerCategory.Database.Command.Name &&
level == LogLevel.Information, true)
});
public UserContext() : base()
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseLoggerFactory(LoggerFactory) // для отключения логгирования закоменнтировать строку
.EnableSensitiveDataLogging() // для отключения логгирования закоменнтировать строку
.UseSqlServer(@"Server=.;Database=UserTestDB;Trusted_Connection=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasIndex(b => b.Status)
.HasName("IX_Status");
modelBuilder.Entity<User>()
.HasIndex(b => b.Age)
.HasName("IX_Age");
modelBuilder.Entity<User>()
.HasIndex(b => b.Name)
.HasName("IX_Name");
}
public DbSet<User> Users { get; set; }
}