LastOrDefaultAsync on EF requires OrderBy first

This commit is contained in:
barelyprofessional
2025-09-07 22:25:01 -05:00
parent 689b7b1cb8
commit f9445d407a
2 changed files with 5 additions and 6 deletions

View File

@@ -128,7 +128,7 @@ public class RakebackCommand : ICommand
var settings = await SettingsProvider.GetMultipleValuesAsync([ var settings = await SettingsProvider.GetMultipleValuesAsync([
BuiltIn.Keys.MoneyRakebackPercentage, BuiltIn.Keys.MoneyRakebackMinimumAmount BuiltIn.Keys.MoneyRakebackPercentage, BuiltIn.Keys.MoneyRakebackMinimumAmount
]); ]);
var mostRecentRakeback = await db.Transactions.LastOrDefaultAsync(tx => var mostRecentRakeback = await db.Transactions.OrderBy(x => x.Id).LastOrDefaultAsync(tx =>
tx.EventSource == TransactionSourceEventType.Rakeback && tx.Gambler == gambler, cancellationToken: ctx); tx.EventSource == TransactionSourceEventType.Rakeback && tx.Gambler == gambler, cancellationToken: ctx);
long offset = 0; long offset = 0;
if (mostRecentRakeback != null) if (mostRecentRakeback != null)
@@ -177,7 +177,7 @@ public class LossbackCommand : ICommand
var settings = await SettingsProvider.GetMultipleValuesAsync([ var settings = await SettingsProvider.GetMultipleValuesAsync([
BuiltIn.Keys.MoneyLossbackPercentage, BuiltIn.Keys.MoneyLossbackMinimumAmount BuiltIn.Keys.MoneyLossbackPercentage, BuiltIn.Keys.MoneyLossbackMinimumAmount
]); ]);
var mostRecentLossback = await db.Transactions.LastOrDefaultAsync(tx => var mostRecentLossback = await db.Transactions.OrderBy(x => x.Id).LastOrDefaultAsync(tx =>
tx.EventSource == TransactionSourceEventType.Lossback && tx.Gambler == gambler, cancellationToken: ctx); tx.EventSource == TransactionSourceEventType.Lossback && tx.Gambler == gambler, cancellationToken: ctx);
long offset = 0; long offset = 0;
if (mostRecentLossback != null) if (mostRecentLossback != null)

View File

@@ -5,7 +5,6 @@ using KfChatDotNetBot.Settings;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json; using Newtonsoft.Json;
using NLog; using NLog;
using JsonSerializer = System.Text.Json.JsonSerializer;
namespace KfChatDotNetBot.Extensions; namespace KfChatDotNetBot.Extensions;
@@ -26,7 +25,7 @@ public static class MoneyExtensions
await using var db = new ApplicationDbContext(); await using var db = new ApplicationDbContext();
db.Attach(user); db.Attach(user);
var gambler = var gambler =
await db.Gamblers.LastOrDefaultAsync(g => g.User == user && g.State != GamblerState.PermanentlyBanned, await db.Gamblers.OrderBy(x => x.Id).LastOrDefaultAsync(g => g.User == user && g.State != GamblerState.PermanentlyBanned,
cancellationToken: ct); cancellationToken: ct);
if (!createIfNoneExists) return gambler; if (!createIfNoneExists) return gambler;
var permaBanned = await db.Gamblers.AnyAsync(g => g.User == user && g.State == GamblerState.PermanentlyBanned, cancellationToken: ct); var permaBanned = await db.Gamblers.AnyAsync(g => g.User == user && g.State == GamblerState.PermanentlyBanned, cancellationToken: ct);
@@ -43,7 +42,7 @@ public static class MoneyExtensions
NextVipLevelWagerRequirement = Money.VipLevels[0].BaseWagerRequirement NextVipLevelWagerRequirement = Money.VipLevels[0].BaseWagerRequirement
}, ct); }, ct);
await db.SaveChangesAsync(ct); await db.SaveChangesAsync(ct);
return await db.Gamblers.LastOrDefaultAsync(g => g.User == user, cancellationToken: ct); return await db.Gamblers.OrderBy(x => x.Id).LastOrDefaultAsync(g => g.User == user, cancellationToken: ct);
} }
/// <summary> /// <summary>
@@ -220,7 +219,7 @@ public static class MoneyExtensions
{ {
await using var db = new ApplicationDbContext(); await using var db = new ApplicationDbContext();
db.Attach(gambler); db.Attach(gambler);
var perk = await db.Perks.LastOrDefaultAsync( var perk = await db.Perks.OrderBy(x => x.Id).LastOrDefaultAsync(
p => p.Gambler == gambler && p.PerkType == GamblerPerkType.VipLevel, ct); p => p.Gambler == gambler && p.PerkType == GamblerPerkType.VipLevel, ct);
return perk; return perk;
} }