Sto avviando un progetto vNext e sto riscontrando alcuni problemi che lo fanno partire. Ho aggiunto una tabella alla classe ApplicationDbContext
e ha creato correttamente la tabella nel db (che nel mio caso è in Azure). Tuttavia, non riesco a dbContext
un'istanza corretta di dbContext
da utilizzare nei miei controller.
Nella mia esperienza con precedenti progetti EF di ASP.NET, ho potuto creare un'istanza della classe ApplicationDbContext senza passare alcun parametro, ma nel caso di vNext, tuttavia, sembra aspettarsi un certo numero di cose ( IServiceProvider
e IOptionsAccessor<DbContextOptions>
). Ho provato a creare un costruttore senza parametri, ma l'app si interrompe per non sapere quali stringhe di connessione utilizzare. Il mio codice è sotto - come si vede nel OnConfiguring(DbContextOptions options)
override, forzare la stringa di connessione in tramite DbContextOptions
, ma ovviamente non è l'ideale, e mi sento come se non stavo solo capendo dove quei due IServiceProvider
, e IOptions I parametri dell'Accessor devono venire.
Grazie per qualsiasi aiuto!
namespace Project.Models
{
// Add profile data for application users by adding properties to the ApplicationUser class
public class ApplicationUser : IdentityUser
{
public string CompanyName { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
private static bool _created = false;
public DbSet<Business> Businesses { get; set; }
public ApplicationDbContext()
: base()
{
if (!_created)
{
Database.EnsureCreated();
_created = true;
}
}
protected override void OnConfiguring(DbContextOptions options)
{
var configuration = new Configuration();
configuration.AddJsonFile("config.json");
configuration.AddEnvironmentVariables();
options.UseSqlServer(configuration.Get("Data:DefaultConnection:ConnectionString"));
}
public ApplicationDbContext(IServiceProvider serviceProvider, IOptionsAccessor<DbContextOptions> optionsAccessor)
: base(serviceProvider, optionsAccessor.Options)
{
// Create the database and schema if it doesn't exist
// This is a temporary workaround to create database until Entity Framework database migrations
// are supported in ASP.NET vNext
if (!_created)
{
Database.EnsureCreated();
_created = true;
}
}
}
}
IServiveProvider e IOptionAccessor sono iniettati dall'Iniezione delle dipendenze, mentre il DI di ASP.Net Core ha delle limitazioni, non è possibile avere più di un costruttore.
Leggi questo: http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx