diff --git a/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs b/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs index cba1b03672..a02f70256e 100644 --- a/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs +++ b/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs @@ -34,6 +34,11 @@ namespace Tgstation.Server.Host.Configuration /// public bool DropDatabase { get; set; } + /// + /// Used to indicate that the database is being loaded to generate migrations. Should not be used in production! + /// + public bool DesignTime { get; set; } + /// /// The form of the of a target MySQL/MariaDB server /// diff --git a/src/Tgstation.Server.Host/Database/Design/DesignTimeDbContextFactoryHelpers.cs b/src/Tgstation.Server.Host/Database/Design/DesignTimeDbContextFactoryHelpers.cs index 5071d72ccf..68fae14333 100644 --- a/src/Tgstation.Server.Host/Database/Design/DesignTimeDbContextFactoryHelpers.cs +++ b/src/Tgstation.Server.Host/Database/Design/DesignTimeDbContextFactoryHelpers.cs @@ -34,7 +34,9 @@ namespace Tgstation.Server.Host.Database.Design builder.AddJsonFile(RootJson); builder.AddJsonFile(DevJson); var configuration = builder.Build(); - return Options.Create(configuration.GetSection(DatabaseConfiguration.Section).Get()); + var dbConfig = configuration.GetSection(DatabaseConfiguration.Section).Get(); + dbConfig.DesignTime = true; + return Options.Create(dbConfig); } } } diff --git a/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs b/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs index 8be3c8eea8..2e71317a65 100644 --- a/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs +++ b/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs @@ -43,18 +43,19 @@ namespace Tgstation.Server.Host.Database // use the DateTimeOffsetToBinaryConverter // Based on: https://github.com/aspnet/EntityFrameworkCore/issues/10784#issuecomment-415769754 // This only supports millisecond precision, but should be sufficient for most use cases. - foreach (var entityType in modelBuilder.Model.GetEntityTypes()) - { - var properties = entityType - .ClrType - .GetProperties() - .Where(p => p.PropertyType == typeof(DateTimeOffset) || p.PropertyType == typeof(DateTimeOffset?)); - foreach (var property in properties) - modelBuilder - .Entity(entityType.Name) - .Property(property.Name) - .HasConversion(new DateTimeOffsetToBinaryConverter()); - } + if (!DatabaseConfiguration.DesignTime) + foreach (var entityType in modelBuilder.Model.GetEntityTypes()) + { + var properties = entityType + .ClrType + .GetProperties() + .Where(p => p.PropertyType == typeof(DateTimeOffset) || p.PropertyType == typeof(DateTimeOffset?)); + foreach (var property in properties) + modelBuilder + .Entity(entityType.Name) + .Property(property.Name) + .HasConversion(new DateTimeOffsetToBinaryConverter()); + } } ///