In my V3 functions project I am trying to wire up Entity Framework and pass a connection string from an environment variable.
In my local.settings.json file I have:
{
"Values" : {
"SqlConnectionString" : "<localdb connection string here>"
}
}
I am wiring up the context using IDesignTimeContextFactory as per this blog post:
public class ContextFactory : IDesignTimeDbContextFactory<Context>
{
public Context CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<Context>();
var connectionString = Environment.GetEnvironmentVariable("SqlConnectionString", EnvironmentVariableTarget.Process);
optionsBuilder.UseSqlServer(connectionString);
return new Context(optionsBuilder.Options);
}
}
When I try adding a migration connectionString is null.
Can anyone see what the problem is here?
Edit:
As suggested, I've also tried defining the connection string and injecting IConfiguration like this:
public class ContextFactory : IDesignTimeDbContextFactory<Context>
{
private readonly IConfiguration _configuration;
public ContextFactory(IConfiguration configuration)
{
_configuration = configuration;
}
public Context CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<Context>();
optionsBuilder.UseSqlServer(_configuration.GetConnectionString("SqlConnectionString"));
return new Context(optionsBuilder.Options);
}
}
but I get the following exception:
System.MissingMethodException: No parameterless constructor defined for type 'EbayTools.Functions.Domain.ContextFactory'.
