Sto usando ASP.Net Core 2.1
con EF Core 2.1
Durante l'esecuzione di qualsiasi migrazione da PMC, ricevo l'errore seguente
Il valore non può essere nullo. Nome del parametro: connectionString
Ecco come appare la mia classe Context
public class MyAppContextFactory : IDesignTimeDbContextFactory<MyAppContext>
{
private readonly string _dbConnection;
public MyAppContextFactory()
{
}
public MyAppContextFactory(string dbConnection)
: this()
{
_dbConnection = dbConnection;
}
public MyAppContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyAppContext>();
optionsBuilder.UseSqlServer(_dbConnection, opts => opts.CommandTimeout((int)TimeSpan.FromMinutes(15).TotalSeconds));
return new MyAppContext(optionsBuilder.Options);
}
}
La stringa My Connection è presente nel livello API in appsettings.json e come buona pratica non dovrei aggiungere alcun riferimento a EF nel livello API / UI.
Come imposto la stringa di connessione secondo l'ambiente in tale architettura a più livelli?
Grazie.
EF, in effetti, avvia la tua applicazione per generare migrazione a partire dal 2.0. È necessario aggiungere DesignTimeDbContextFactory al progetto che interrogherà la stringa di connessione per questo caso d'uso, ad esempio in questo modo:
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<StorageContext>
{
public StorageContext CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false)
.AddJsonFile("appsettings.Development.json", optional: true)
.Build();
var builder = new DbContextOptionsBuilder<StorageContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseSqlServer(connectionString);
Console.WriteLine($"Running DesignTime DB context. ({connectionString})");
return new StorageContext(builder.Options);
}
}