AidaHagh / EF-Core

Learn EF Core
1 stars 0 forks source link

Global Query Filters - Example3 #23

Open AidaHagh opened 2 months ago

AidaHagh commented 2 months ago

مثال 3: مدیریت وضعیت فرض کنید شما یک سیستم مدیریت تسک‌ها دارید و می‌خواهید فقط تسک‌های فعال را نشان دهید.

public class Task {

public int TaskId { get; set; }
public string TaskName { get; set; }
public bool IsActive { get; set; }

}

public class ApplicationDbContext : DbContext {

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
    : base(options)
{
}

public DbSet<Task> Tasks { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Task>().HasQueryFilter(t => t.IsActive);
}

}


class Program {

static void Main()
{
    var options = new DbContextOptionsBuilder<ApplicationDbContext>()
        .UseInMemoryDatabase(databaseName: "TestDatabase")
        .Options;

    using (var context = new ApplicationDbContext(options))
    {
        // افزودن تسک‌ها
        context.Tasks.AddRange(
            new Task { TaskName = "Task1", IsActive = true },
            new Task { TaskName = "Task2", IsActive = false }
        );
        context.SaveChanges();

        // اجرای کوئری: فقط تسک‌های فعال بازگردانده می‌شوند
        var tasks = context.Tasks.ToList();

        foreach (var task in tasks)
        {
            Console.WriteLine($"Active Task: {task.TaskName}");
        }
    }
}

}

AidaHagh commented 2 months ago

استفاده از ()UseInMemoryDatabase این امکان را می‌دهد که یک دیتابیس در حافظه ایجاد کنیم که فقط در زمان اجرای برنامه موجود است و پس از بسته شدن برنامه تمام داده‌ها را از دست می‌دهد. این کار برای تست‌ها خوبه چون نیاز به تنظیم و مدیریت یک سرور دیتابیس واقعی نداریم.