diff --git a/Core/Data/CoreContext.cs b/Core/Data/CoreContext.cs
index 900e0a4..286e98c 100644
--- a/Core/Data/CoreContext.cs
+++ b/Core/Data/CoreContext.cs
@@ -1,28 +1,19 @@
-using System.Threading.Tasks;
+using Kruzya.TelegramBot.Core.EF;
using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.Core.Data
{
- public class CoreContext : DbContext
+ public class CoreContext : AutoSaveDbContext
{
///
/// The all known users.
///
public DbSet Users { get; set; }
-
- public DbSet UserValues { get; set; }
- public override void Dispose()
- {
- SaveChanges();
- base.Dispose();
- }
-
- public override ValueTask DisposeAsync()
- {
- SaveChanges();
- return base.DisposeAsync();
- }
+ ///
+ /// The all knows user options and values.
+ ///
+ public DbSet UserValues { get; set; }
public CoreContext(DbContextOptions ctx) : base(ctx)
{
diff --git a/Core/EF/AutoSaveDbContext.Add.cs b/Core/EF/AutoSaveDbContext.Add.cs
new file mode 100644
index 0000000..c65835c
--- /dev/null
+++ b/Core/EF/AutoSaveDbContext.Add.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.ChangeTracking;
+
+namespace Kruzya.TelegramBot.Core.EF;
+
+public abstract partial class AutoSaveDbContext
+{
+ public override EntityEntry Add(object entity)
+ {
+ var entry = base.Add(entity);
+ SaveChanges();
+
+ return entry;
+ }
+
+ public override EntityEntry Add(TEntity entity)
+ {
+ var entry = base.Add(entity);
+ SaveChanges();
+
+ return entry;
+ }
+}
diff --git a/Core/EF/AutoSaveDbContext.Remove.cs b/Core/EF/AutoSaveDbContext.Remove.cs
new file mode 100644
index 0000000..e39ff94
--- /dev/null
+++ b/Core/EF/AutoSaveDbContext.Remove.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.ChangeTracking;
+
+namespace Kruzya.TelegramBot.Core.EF;
+
+public abstract partial class AutoSaveDbContext
+{
+ public override EntityEntry Remove(object entity)
+ {
+ var entry = base.Remove(entity);
+ SaveChanges();
+
+ return entry;
+ }
+
+ public override EntityEntry Remove(TEntity entity)
+ {
+ var entry = base.Remove(entity);
+ SaveChanges();
+
+ return entry;
+ }
+}
diff --git a/Core/EF/AutoSaveDbContext.Update.cs b/Core/EF/AutoSaveDbContext.Update.cs
new file mode 100644
index 0000000..9c3c026
--- /dev/null
+++ b/Core/EF/AutoSaveDbContext.Update.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.ChangeTracking;
+
+namespace Kruzya.TelegramBot.Core.EF;
+
+public abstract partial class AutoSaveDbContext
+{
+ public override EntityEntry Update(object entity)
+ {
+ var entry = base.Update(entity);
+ SaveChanges();
+
+ return entry;
+ }
+
+ public override EntityEntry Update(TEntity entity)
+ {
+ var entry = base.Update(entity);
+ SaveChanges();
+
+ return entry;
+ }
+}
diff --git a/Core/EF/AutoSaveDbContext.cs b/Core/EF/AutoSaveDbContext.cs
new file mode 100644
index 0000000..04871b3
--- /dev/null
+++ b/Core/EF/AutoSaveDbContext.cs
@@ -0,0 +1,12 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace Kruzya.TelegramBot.Core.EF;
+
+///
+/// EF database context with autosaving feature.
+///
+public abstract partial class AutoSaveDbContext : DbContext
+{
+ protected AutoSaveDbContext(DbContextOptions options) : base(options)
+ {}
+}
diff --git a/modules/RichSiteSummary/Data/RichSiteSummaryContext.cs b/modules/RichSiteSummary/Data/RichSiteSummaryContext.cs
index 6b7328c..c837836 100644
--- a/modules/RichSiteSummary/Data/RichSiteSummaryContext.cs
+++ b/modules/RichSiteSummary/Data/RichSiteSummaryContext.cs
@@ -1,8 +1,9 @@
-using Microsoft.EntityFrameworkCore;
+using Kruzya.TelegramBot.Core.EF;
+using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.RichSiteSummary.Data
{
- public class RichSiteSummaryContext : DbContext
+ public class RichSiteSummaryContext : AutoSaveDbContext
{
///
/// Repository with all feeds in database.