mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-10 17:59:38 +08:00
60 lines
2.2 KiB
C#
60 lines
2.2 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Design;
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
namespace BuildingBlocks.EFCore
|
|
{
|
|
public abstract class DesignTimeDbContextFactoryBase<TContext> : IDesignTimeDbContextFactory<TContext> where TContext : DbContext
|
|
{
|
|
public TContext CreateDbContext(string[] args)
|
|
{
|
|
return Create(Directory.GetCurrentDirectory(), Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
|
|
}
|
|
|
|
protected abstract TContext CreateNewInstance(DbContextOptions<TContext> options);
|
|
|
|
public TContext Create()
|
|
{
|
|
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
|
|
var basePath = AppContext.BaseDirectory;
|
|
return Create(basePath, environmentName);
|
|
}
|
|
|
|
private TContext Create(string basePath, string environmentName)
|
|
{
|
|
var builder = new ConfigurationBuilder()
|
|
.SetBasePath(basePath)
|
|
.AddJsonFile("appsettings.json")
|
|
.AddJsonFile($"appsettings.{environmentName}.json", true)
|
|
.AddEnvironmentVariables();
|
|
|
|
var config = builder.Build();
|
|
|
|
var connstr = config.GetConnectionString("DefaultConnection");
|
|
|
|
if (string.IsNullOrWhiteSpace(connstr))
|
|
{
|
|
throw new InvalidOperationException(
|
|
"Could not find a connection string named 'Default'.");
|
|
}
|
|
return Create(connstr);
|
|
}
|
|
|
|
private TContext Create(string connectionString)
|
|
{
|
|
if (string.IsNullOrEmpty(connectionString))
|
|
throw new ArgumentException(
|
|
$"{nameof(connectionString)} is null or empty.",
|
|
nameof(connectionString));
|
|
|
|
var optionsBuilder = new DbContextOptionsBuilder<TContext>();
|
|
|
|
Console.WriteLine("DesignTimeDbContextFactory.Create(string): Connection string: {0}", connectionString);
|
|
|
|
optionsBuilder.UseSqlServer(connectionString);
|
|
|
|
var options = optionsBuilder.Options;
|
|
return CreateNewInstance(options);
|
|
}
|
|
}
|
|
} |