In un progetto ho bisogno di impostare un ASP.NET MVC (con .NET 4.6.1) ma usando il "nuovo" EF Core per accedere al database.
Sfortunatamente ogni documentazione spiega solo come configurare un progetto ASP.NET Core MVC.
Ho appena fatto un tentativo e quando si tratta di creare il database tramite la console di Gestione pacchetti ottengo il messaggio di errore:
Nessun costruttore senza parametri è stato trovato su "DataContext". Aggiungere un costruttore senza parametri a "DataContext" o aggiungere un'implementazione di "IDbContextFactory" nello stesso assembly di "DataContext"
Sì, non ho un costruttore senza parametri, ma nemmeno il codice di esempio di Microsoft
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
Suppongo che il problema sia che non registro DataContext in Startup.cs che non ho in una "vecchia" applicazione ASP.NET MVC.
Qualcuno può aiutarmi con questo?
Un semplice esempio
In Esempio.EF : Installa EF Core, Iniezione Dipendenza Microsft. Creare una classe per supportare DI
public static class IocConfiguration
{
public static void Configure()
{
var services = new ServiceCollection();
services.AddDbContextPool<ExampleContext>(options => {
options.UseSqlServer("_connectionstring_");
});
// Register to support the ExampleController can get DbContext.
services.AddTransient(typeof(ExampleController));
var serviceProvider = services.BuildServiceProvider();
DependencyResolver.SetResolver(new DefaultServiceResolver(serviceProvider));
}
}
public class DefaultServiceResolver : IDependencyResolver
{
private readonly IServiceProvider _serviceProvider;
public DefaultServiceResolver(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public object GetService(Type serviceType)
{
return _serviceProvider.GetService(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _serviceProvider.GetServices(serviceType);
}
}
Nel Example.MVC, con l'Application Start in Global.asax o di avvio con Owin
// Register services.
IocConfiguration.Configure();
// Example controller
public class ExampleController : Controller
{
private readonly ExampleContext _exampleContext;
public ExampleController(ExampleContext exampleContext)
{
_exampleContext = exampleContext;
}
}
Per eseguire la migrazione:
Add-Migration {MigrationName} -Project Example.EF -StartupProject Example.Tools
Dovremmo avere IDesignTimeDbContextFactory per supportare per eseguire la migrazione.