Use the configuration depending on the selected database provider #13
Application/Common/Mappings
Backend.slnPersistence
SqlData
Application
Application.csprojDependencyInjection.cs
Common
Cqrs
Campus
Queries
Discipline
Queries
Faculty
Queries
Group
Queries
LectureHall
Queries
Professor
Queries
Schedule
Interfaces
Domain
Domain.csproj
Schedule
Persistence
Common
Contexts
Schedule
EntityTypeConfigurations
Mark.cs
Persistence.csprojUberDbContext.csSqlite
@ -1,24 +1,41 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Mirea.Api.DataAccess.Application.Interfaces.DbContexts.Schedule;
|
using Mirea.Api.DataAccess.Application.Interfaces.DbContexts.Schedule;
|
||||||
|
using Mirea.Api.DataAccess.Domain.Schedule;
|
||||||
|
using Mirea.Api.DataAccess.Persistence.Common;
|
||||||
using Mirea.Api.DataAccess.Persistence.Contexts.Schedule;
|
using Mirea.Api.DataAccess.Persistence.Contexts.Schedule;
|
||||||
|
using Mirea.Api.DataAccess.Persistence.EntityTypeConfigurations;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
namespace Mirea.Api.DataAccess.Persistence;
|
namespace Mirea.Api.DataAccess.Persistence;
|
||||||
|
|
||||||
public static class DependencyInjection
|
public static class DependencyInjection
|
||||||
{
|
{
|
||||||
public static IServiceCollection AddPersistence(this IServiceCollection services, string connection)
|
public static IServiceCollection AddPersistence(this IServiceCollection services, DatabaseProvider dbProvider, string connection)
|
||||||
{
|
{
|
||||||
services.AddDbContext<CampusDbContext>(DbConfig);
|
services.AddDbContext<CampusDbContext>(options =>
|
||||||
services.AddDbContext<DisciplineDbContext>(DbConfig);
|
UseDatabase(options).CreateDbContext<CampusDbContext, Campus>(dbProvider));
|
||||||
services.AddDbContext<FacultyDbContext>(DbConfig);
|
services.AddDbContext<DisciplineDbContext>(options =>
|
||||||
services.AddDbContext<GroupDbContext>(DbConfig);
|
UseDatabase(options).CreateDbContext<DisciplineDbContext, Discipline>(dbProvider));
|
||||||
services.AddDbContext<LectureHallDbContext>(DbConfig);
|
services.AddDbContext<FacultyDbContext>(options =>
|
||||||
services.AddDbContext<LessonAssociationDbContext>(DbConfig);
|
UseDatabase(options).CreateDbContext<FacultyDbContext, Faculty>(dbProvider));
|
||||||
services.AddDbContext<ProfessorDbContext>(DbConfig);
|
services.AddDbContext<GroupDbContext>(options =>
|
||||||
services.AddDbContext<LessonDbContext>(DbConfig);
|
UseDatabase(options).CreateDbContext<GroupDbContext, Group>(dbProvider));
|
||||||
services.AddDbContext<TypeOfOccupationDbContext>(DbConfig);
|
services.AddDbContext<LectureHallDbContext>(options =>
|
||||||
services.AddDbContext<SpecificWeekDbContext>(DbConfig);
|
UseDatabase(options).CreateDbContext<LectureHallDbContext, LectureHall>(dbProvider));
|
||||||
|
services.AddDbContext<LessonAssociationDbContext>(options =>
|
||||||
|
UseDatabase(options).CreateDbContext<LessonAssociationDbContext, LessonAssociation>(dbProvider));
|
||||||
|
services.AddDbContext<ProfessorDbContext>(options =>
|
||||||
|
UseDatabase(options).CreateDbContext<ProfessorDbContext, Professor>(dbProvider));
|
||||||
|
services.AddDbContext<LessonDbContext>(options =>
|
||||||
|
UseDatabase(options).CreateDbContext<LessonDbContext, Lesson>(dbProvider));
|
||||||
|
services.AddDbContext<TypeOfOccupationDbContext>(options =>
|
||||||
|
UseDatabase(options).CreateDbContext<TypeOfOccupationDbContext, TypeOfOccupation>(dbProvider));
|
||||||
|
services.AddDbContext<SpecificWeekDbContext>(options =>
|
||||||
|
UseDatabase(options).CreateDbContext<SpecificWeekDbContext, SpecificWeek>(dbProvider));
|
||||||
|
|
||||||
|
|
||||||
services.AddDbContext<UberDbContext>(DbConfig);
|
services.AddDbContext<UberDbContext>(DbConfig);
|
||||||
|
|
||||||
@ -35,6 +52,15 @@ public static class DependencyInjection
|
|||||||
|
|
||||||
return services;
|
return services;
|
||||||
|
|
||||||
void DbConfig(DbContextOptionsBuilder options) => options.UseSqlite(connection);
|
DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder options)
|
||||||
|
{
|
||||||
|
return dbProvider switch
|
||||||
|
{
|
||||||
|
DatabaseProvider.Sqlite => options.UseSqlite(connection),
|
||||||
|
DatabaseProvider.Mysql => options.UseMySql(connection, ServerVersion.AutoDetect(connection)),
|
||||||
|
DatabaseProvider.Postgresql => options.UseNpgsql(connection),
|
||||||
|
_ => throw new ArgumentException("Unsupported database provider", Enum.GetName(dbProvider))
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user