diff --git a/BetterGenshinImpact/BetterGenshinImpact.csproj b/BetterGenshinImpact/BetterGenshinImpact.csproj
index ae240f04..38f7eab7 100644
--- a/BetterGenshinImpact/BetterGenshinImpact.csproj
+++ b/BetterGenshinImpact/BetterGenshinImpact.csproj
@@ -80,6 +80,9 @@
+
+
+
diff --git a/BetterGenshinImpact/Model/Database/ApplicationDbContext.cs b/BetterGenshinImpact/Model/Database/ApplicationDbContext.cs
new file mode 100644
index 00000000..e3df9358
--- /dev/null
+++ b/BetterGenshinImpact/Model/Database/ApplicationDbContext.cs
@@ -0,0 +1,25 @@
+using System.IO;
+using BetterGenshinImpact.Core.Config;
+using Microsoft.EntityFrameworkCore;
+
+namespace BetterGenshinImpact.Model.Database
+{
+ public class ApplicationDbContext : DbContext
+ {
+ public DbSet TaskLists { get; set; }
+
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ var dbPath = Path.Combine(Global.Absolute("User\\db"), "Data", "bgi_user.db");
+ Directory.CreateDirectory(Path.GetDirectoryName(dbPath)!);
+ optionsBuilder.UseSqlite($"Data Source={dbPath}");
+ }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder.Entity()
+ .HasIndex(t => t.OrderIndex)
+ .IsUnique();
+ }
+ }
+}
\ No newline at end of file
diff --git a/BetterGenshinImpact/Model/Database/TaskList.cs b/BetterGenshinImpact/Model/Database/TaskList.cs
new file mode 100644
index 00000000..10037cbc
--- /dev/null
+++ b/BetterGenshinImpact/Model/Database/TaskList.cs
@@ -0,0 +1,51 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace BetterGenshinImpact.Model.Database
+{
+ [Table("task_list")]
+ public class TaskList
+ {
+ [Key]
+ [Column("id")]
+ public int Id { get; set; }
+
+ [Column("order_index")]
+ public int OrderIndex { get; set; }
+
+ [Column("task_name")]
+ [Required]
+ [MaxLength(255)]
+ public string TaskName { get; set; } = string.Empty;
+
+ [Column("task_params")]
+ public string? TaskParams { get; set; }
+
+ [Column("schedule_expression")]
+ [MaxLength(255)]
+ public string? ScheduleExpression { get; set; }
+
+ [Column("schedule_type")]
+ [MaxLength(50)]
+ public string? ScheduleType { get; set; }
+
+ [Column("next_run_time")]
+ public DateTime? NextRunTime { get; set; }
+
+ [Column("last_run_time")]
+ public DateTime? LastRunTime { get; set; }
+
+ [Column("hotkey")]
+ [MaxLength(50)]
+ public string? Hotkey { get; set; }
+
+ [Column("hotkey_")]
+ [MaxLength(50)]
+ public string? Hotkey2 { get; set; }
+
+ [Column("category")]
+ [MaxLength(50)]
+ public string? Category { get; set; }
+ }
+}
\ No newline at end of file