Lisa
Lisa
CC#
Created by Lisa on 5/8/2025 in #help
✅ Nested Record Inheritance
I'm trying a bit of inheritance shenanigans, the API I'm working with wraps everything in a data object, which usually has two fields that always appear:
public abstract record CharacterActionResult([property: JsonPropertyName("data")] CharacterActionResultData Data);

public abstract record CharacterActionResultData(
[property: JsonPropertyName("cooldown")] Cooldown Cooldown,
[property: JsonPropertyName("character")] Character Character
);
public abstract record CharacterActionResult([property: JsonPropertyName("data")] CharacterActionResultData Data);

public abstract record CharacterActionResultData(
[property: JsonPropertyName("cooldown")] Cooldown Cooldown,
[property: JsonPropertyName("character")] Character Character
);
This way I can keep a base record for when I need to access cooldown/character in a generic method, but I can still the define the fields that are different:
public record FightResult(FightResultData Data) : CharacterActionResult(Data);

public record FightResultData(
[property: JsonPropertyName("fight")] Fight Fight,
Cooldown Cooldown,
Character Character
) : CharacterActionResultData(Cooldown, Character);
public record FightResult(FightResultData Data) : CharacterActionResult(Data);

public record FightResultData(
[property: JsonPropertyName("fight")] Fight Fight,
Cooldown Cooldown,
Character Character
) : CharacterActionResultData(Cooldown, Character);
However, I get an error: 0>FightResult.cs(6,43): Error CS8866 : Record member 'Artifacts.Model.Characters.CharacterActionResult.Data' must be a readable instance property or field of type 'Artifacts.Model.Characters.FightResultData' to match positional parameter 'Data'. Am I looking over something?
19 replies
CC#
Created by Lisa on 6/28/2024 in #help
✅ Unable to create migration - 'Unable to resolve service for type 'DbContextOptions'
This is my first time creating migrations (never had a need until now), so please bear with me. I'm trying to use dotnet ef migrations add AMigrationName to add a migration to my project, However, I get this error:
Unable to create a 'DbContext' of type ''. The exception 'Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOpt
ions`1[Treehouse_Guardian.Database.DatabaseContext]' while attempting to activate 'Treehouse_Guardian.Database.DatabaseContext'.' was th
rown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?l
inkid=851728
Unable to create a 'DbContext' of type ''. The exception 'Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOpt
ions`1[Treehouse_Guardian.Database.DatabaseContext]' while attempting to activate 'Treehouse_Guardian.Database.DatabaseContext'.' was th
rown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?l
inkid=851728
My startup looks like this:
private Program()
{
_configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false)
.Build();

_serviceProvider = new ServiceCollection()
.AddSingleton(_configuration)
.AddSingleton(ConfigureDiscordSocketConfig)
.AddSingleton(ConfigureDiscordSocketClient)
.AddSingleton<InteractionService>()
.AddSingleton<InteractionHandler>()
.AddSingleton<WritingService.WritingService>()
.AddSingleton<TreehouseMemberService>()
.AddSingleton<BenzHandler>()
.AddSingleton<GniHandler>()
.AddSingleton<HttpClient>()
.AddDbContext<DatabaseContext>(ConfigureDbContext)
.BuildServiceProvider();

Logger.ConfigureLogging();
}
private Program()
{
_configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false)
.Build();

_serviceProvider = new ServiceCollection()
.AddSingleton(_configuration)
.AddSingleton(ConfigureDiscordSocketConfig)
.AddSingleton(ConfigureDiscordSocketClient)
.AddSingleton<InteractionService>()
.AddSingleton<InteractionHandler>()
.AddSingleton<WritingService.WritingService>()
.AddSingleton<TreehouseMemberService>()
.AddSingleton<BenzHandler>()
.AddSingleton<GniHandler>()
.AddSingleton<HttpClient>()
.AddDbContext<DatabaseContext>(ConfigureDbContext)
.BuildServiceProvider();

Logger.ConfigureLogging();
}
And ConfigureDbContext is just:
private void ConfigureDbContext(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_configuration["Postgres:ConnectionString"]);
}
private void ConfigureDbContext(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_configuration["Postgres:ConnectionString"]);
}
My databasecontext looks like this:
using Microsoft.EntityFrameworkCore;
using Treehouse_Guardian.Model;

namespace Treehouse_Guardian.Database;

public class DatabaseContext(DbContextOptions<DatabaseContext> options) : DbContext(options)
{
public DbSet<TreehouseMember> TreehouseMember
{
get;
set;
}
}
using Microsoft.EntityFrameworkCore;
using Treehouse_Guardian.Model;

namespace Treehouse_Guardian.Database;

public class DatabaseContext(DbContextOptions<DatabaseContext> options) : DbContext(options)
{
public DbSet<TreehouseMember> TreehouseMember
{
get;
set;
}
}
What am I missing? How can I make sure the migration creator can access my dbcontextoptions at design time?
2 replies