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.