Fix (?) issues related with concurrency

This commit is contained in:
2022-01-22 21:54:11 +03:00
parent b9a6bb0bc6
commit 8f51f1ece0
6 changed files with 87 additions and 17 deletions
+5 -14
View File
@@ -1,29 +1,20 @@
using System.Threading.Tasks; using Kruzya.TelegramBot.Core.EF;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.Core.Data namespace Kruzya.TelegramBot.Core.Data
{ {
public class CoreContext : DbContext public class CoreContext : AutoSaveDbContext
{ {
/// <summary> /// <summary>
/// The all known users. /// The all known users.
/// </summary> /// </summary>
public DbSet<BotUser> Users { get; set; } public DbSet<BotUser> Users { get; set; }
/// <summary>
/// The all knows user options and values.
/// </summary>
public DbSet<BotUserValue> UserValues { get; set; } public DbSet<BotUserValue> UserValues { get; set; }
public override void Dispose()
{
SaveChanges();
base.Dispose();
}
public override ValueTask DisposeAsync()
{
SaveChanges();
return base.DisposeAsync();
}
public CoreContext(DbContextOptions<CoreContext> ctx) : base(ctx) public CoreContext(DbContextOptions<CoreContext> ctx) : base(ctx)
{ {
Database.Migrate(); Database.Migrate();
+22
View File
@@ -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<TEntity> Add<TEntity>(TEntity entity)
{
var entry = base.Add(entity);
SaveChanges();
return entry;
}
}
+22
View File
@@ -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<TEntity> Remove<TEntity>(TEntity entity)
{
var entry = base.Remove(entity);
SaveChanges();
return entry;
}
}
+22
View File
@@ -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<TEntity> Update<TEntity>(TEntity entity)
{
var entry = base.Update(entity);
SaveChanges();
return entry;
}
}
+12
View File
@@ -0,0 +1,12 @@
using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.Core.EF;
/// <summary>
/// EF database context with autosaving feature.
/// </summary>
public abstract partial class AutoSaveDbContext : DbContext
{
protected AutoSaveDbContext(DbContextOptions options) : base(options)
{}
}
@@ -1,8 +1,9 @@
using Microsoft.EntityFrameworkCore; using Kruzya.TelegramBot.Core.EF;
using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.RichSiteSummary.Data namespace Kruzya.TelegramBot.RichSiteSummary.Data
{ {
public class RichSiteSummaryContext : DbContext public class RichSiteSummaryContext : AutoSaveDbContext
{ {
/// <summary> /// <summary>
/// Repository with all feeds in database. /// Repository with all feeds in database.