diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs
index 4a6b6909b9..1d6d8b6726 100644
--- a/osu.Game/Beatmaps/BeatmapManager.cs
+++ b/osu.Game/Beatmaps/BeatmapManager.cs
@@ -86,7 +86,7 @@ namespace osu.Game.Beatmaps
protected override BeatmapSetInfo CheckForExisting(BeatmapSetInfo model)
{
// check if this beatmap has already been imported and exit early if so
- var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == model.Hash);
+ var existingHashMatch = beatmaps.ConsumableItems.FirstOrDefault(b => b.Hash == model.Hash);
if (existingHashMatch != null)
{
Undelete(existingHashMatch);
@@ -96,7 +96,7 @@ namespace osu.Game.Beatmaps
// check if a set already exists with the same online id
if (model.OnlineBeatmapSetID != null)
{
- var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == model.OnlineBeatmapSetID);
+ var existingOnlineId = beatmaps.ConsumableItems.FirstOrDefault(b => b.OnlineBeatmapSetID == model.OnlineBeatmapSetID);
if (existingOnlineId != null)
{
Delete(existingOnlineId);
@@ -229,20 +229,20 @@ namespace osu.Game.Beatmaps
///
/// The query.
/// The first result for the provided query, or null if no results were found.
- public BeatmapSetInfo QueryBeatmapSet(Expression> query) => beatmaps.BeatmapSets.AsNoTracking().FirstOrDefault(query);
+ public BeatmapSetInfo QueryBeatmapSet(Expression> query) => beatmaps.ConsumableItems.AsNoTracking().FirstOrDefault(query);
///
/// Returns a list of all usable s.
///
/// A list of available .
- public List GetAllUsableBeatmapSets() => beatmaps.BeatmapSets.Where(s => !s.DeletePending && !s.Protected).ToList();
+ public List GetAllUsableBeatmapSets() => beatmaps.ConsumableItems.Where(s => !s.DeletePending && !s.Protected).ToList();
///
/// Perform a lookup query on available s.
///
/// The query.
/// Results from the provided query.
- public IEnumerable QueryBeatmapSets(Expression> query) => beatmaps.BeatmapSets.AsNoTracking().Where(query);
+ public IEnumerable QueryBeatmapSets(Expression> query) => beatmaps.ConsumableItems.AsNoTracking().Where(query);
///
/// Perform a lookup query on available s.
diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs
index e695c3bf28..2e37076aca 100644
--- a/osu.Game/Beatmaps/BeatmapStore.cs
+++ b/osu.Game/Beatmaps/BeatmapStore.cs
@@ -63,13 +63,19 @@ namespace osu.Game.Beatmaps
return true;
}
- protected override IQueryable AddIncludesForDeletion(IQueryable query)
- {
- return base.AddIncludesForDeletion(query)
+ protected override IQueryable AddIncludesForDeletion(IQueryable query) =>
+ base.AddIncludesForDeletion(query)
.Include(s => s.Beatmaps).ThenInclude(b => b.Metadata)
.Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty)
.Include(s => s.Metadata);
- }
+
+ protected override IQueryable AddIncludesForConsumption(IQueryable query) =>
+ base.AddIncludesForConsumption(query)
+ .Include(s => s.Metadata)
+ .Include(s => s.Beatmaps).ThenInclude(s => s.Ruleset)
+ .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty)
+ .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata)
+ .Include(s => s.Files).ThenInclude(f => f.FileInfo);
protected override void Purge(List items, OsuDbContext context)
{
@@ -83,18 +89,12 @@ namespace osu.Game.Beatmaps
base.Purge(items, context);
}
- public IQueryable BeatmapSets => ContextFactory.Get().BeatmapSetInfo
- .Include(s => s.Metadata)
- .Include(s => s.Beatmaps).ThenInclude(s => s.Ruleset)
- .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty)
- .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata)
- .Include(s => s.Files).ThenInclude(f => f.FileInfo);
-
- public IQueryable Beatmaps => ContextFactory.Get().BeatmapInfo
- .Include(b => b.BeatmapSet).ThenInclude(s => s.Metadata)
- .Include(b => b.BeatmapSet).ThenInclude(s => s.Files).ThenInclude(f => f.FileInfo)
- .Include(b => b.Metadata)
- .Include(b => b.Ruleset)
- .Include(b => b.BaseDifficulty);
+ public IQueryable Beatmaps =>
+ ContextFactory.Get().BeatmapInfo
+ .Include(b => b.BeatmapSet).ThenInclude(s => s.Metadata)
+ .Include(b => b.BeatmapSet).ThenInclude(s => s.Files).ThenInclude(f => f.FileInfo)
+ .Include(b => b.Metadata)
+ .Include(b => b.Ruleset)
+ .Include(b => b.BaseDifficulty);
}
}
diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs
index 01fcfbfe43..3905942c8c 100644
--- a/osu.Game/Database/MutableDatabaseBackedStore.cs
+++ b/osu.Game/Database/MutableDatabaseBackedStore.cs
@@ -21,6 +21,11 @@ namespace osu.Game.Database
{
}
+ ///
+ /// Access items pre-populated with includes for consumption.
+ ///
+ public IQueryable ConsumableItems => AddIncludesForConsumption(ContextFactory.Get().Set());
+
public void Add(T item)
{
using (var usage = ContextFactory.GetForWrite())