Deck fixes
This commit is contained in:
@@ -19,6 +19,7 @@ public class DeckRepository : IDeckRepository
|
||||
{
|
||||
var viewer = await _dbContext.Viewers
|
||||
.AsNoTracking()
|
||||
.AsSplitQuery()
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Class)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Sleeve)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.LeaderSkin)
|
||||
@@ -33,6 +34,7 @@ public class DeckRepository : IDeckRepository
|
||||
var requested = formats.ToHashSet();
|
||||
var viewer = await _dbContext.Viewers
|
||||
.AsNoTracking()
|
||||
.AsSplitQuery()
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Class)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Sleeve)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.LeaderSkin)
|
||||
@@ -53,6 +55,7 @@ public class DeckRepository : IDeckRepository
|
||||
{
|
||||
var viewer = await _dbContext.Viewers
|
||||
.AsNoTracking()
|
||||
.AsSplitQuery()
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Class)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Sleeve)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.LeaderSkin)
|
||||
@@ -75,6 +78,7 @@ public class DeckRepository : IDeckRepository
|
||||
Action<ShadowverseDeckEntry> mutate)
|
||||
{
|
||||
var viewer = await _dbContext.Viewers
|
||||
.AsSplitQuery()
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Class)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Sleeve)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.LeaderSkin)
|
||||
|
||||
@@ -39,8 +39,14 @@ public class ViewerRepository : IViewerRepository
|
||||
/// </summary>
|
||||
public async Task<Models.Viewer?> GetViewerByShortUdid(long shortUdid)
|
||||
{
|
||||
// AsSplitQuery: each Include() collection runs as a separate SELECT instead of one giant
|
||||
// LEFT JOIN with a cartesian product on the result set. The combined Decks+DeckCard+Cards+
|
||||
// many-to-many-cosmetics shape was producing hundreds of thousands of duplicate rows after
|
||||
// the import-time default-deck clone landed (24 decks × 40 DeckCards × N cosmetics each),
|
||||
// pushing /load/index to ~17 s/request. Split queries take O(rows) total instead.
|
||||
return await _dbContext.Set<Models.Viewer>()
|
||||
.AsNoTracking()
|
||||
.AsSplitQuery()
|
||||
.Include(v => v.MissionData)
|
||||
.Include(v => v.Info).ThenInclude(i => i.SelectedEmblem)
|
||||
.Include(v => v.Info).ThenInclude(i => i.SelectedDegree)
|
||||
|
||||
Reference in New Issue
Block a user