2016-07-12 18 views
17
üzerinde 'Hayır veritabanı sağlayıcısı bu DBContext için yapılandırılan'

.Net Çekirdek 1.0.0 - SDK Önizleme 2 (x64)SignInManager.PasswordSignInAsync

.Net Çekirdek 1.0.0 - "15" Önizleme 2 VS (x64)

.Net Çekirdek 1.0.0 - Süre (x64)

Demek ki yukarıda son sürümlerine bir RC1 uygulamasını güncelledi. Birkaç saat süren referanslar geçtikten sonra koşuyor.

public class AccountController : BaseController 
{ 
    public UserManager<ApplicationUser> UserManager { get; private set; } 
    public SignInManager<ApplicationUser> SignInManager { get; private set; } 
    private readonly IEmailSender EmailSender; 

    public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager, IEmailSender emailSender) 
    { 
     UserManager = userManager; 
     SignInManager = signInManager; 
     EmailSender = emailSender; 
    } 

    // GET: /Account/Login 
    [HttpGet] 
    [AllowAnonymous] 
    public IActionResult Login(string returnUrl = null) 
    { 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

    // 
    // POST: /Account/Login 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Login(ViewModels.Account.LoginViewModel model, string returnUrl = null) 
    { 
     if (ModelState.IsValid) 
     { 
      // Errs this next line 
      var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, false); // <-- ERRS HERE '.PasswordSignInAsync' 
      if (result.Succeeded) 
       return RedirectToLocal(returnUrl); 

      ModelState.AddModelError("", "Invalid email or password."); 
      return View(model); 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

Aşağıdaki hata mesajı ile patlarsa: in (AccountController/Giriş) giriş Ancak, ben de bir hata alıyorum

ınvalidoperationexception: Hayır veritabanı sağlayıcısı bunun için yapılandırıldı DBContext. Bir sağlayıcı, DbContext.OnConfiguring yöntemini geçersiz kılarak veya uygulama hizmeti sağlayıcısında AddDbContext kullanarak yapılandırılabilir. AddDbContext kullanılıyorsa, DbContext türünüzün yapıcısında bir DbContextOptions nesnesi kabul ettiğinden emin olun ve DbContext için temel kurucuya iletin. İşte

Startup.cs geçerli:

public void ConfigureServices(IServiceCollection services) 
    { 
     services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 

     // Add EF services to the services container. 
     services.AddEntityFrameworkSqlServer() 
      .AddDbContext<LogManagerContext>(options => 
       options.UseSqlServer(Configuration["Data:DefaultConnection:Connectionstring"])); 

     services.AddSingleton(c => Configuration); 

     // Add Identity services to the services container. 
     services.AddIdentity<ApplicationUser, IdentityRole>() 
      .AddEntityFrameworkStores<LogManagerContext>() 
      .AddDefaultTokenProviders(); 


     // Add MVC services to the services container. 
     services.AddMvc(); 

     services.AddTransient<IHttpContextAccessor, HttpContextAccessor>(); 

     //Add all SignalR related services to IoC. - Signal R not ready yet - Chad 
     //services.AddSignalR(); 

     //Add InMemoryCache 
     services.AddMemoryCache(); 

     services.AddSession(options => 
     { 
      options.IdleTimeout = System.TimeSpan.FromHours(1); 
      options.CookieName = ".LogManager"; 
     }); 

     // Uncomment the following line to add Web API servcies which makes it easier to port Web API 2 controllers. 
     // You need to add Microsoft.AspNet.Mvc.WebApiCompatShim package to project.json 
     // services.AddWebApiConventions(); 
     // Register application services. 
     services.AddTransient<IEmailSender, AuthMessageSender>(); 

    } 

    // Configure is called after ConfigureServices is called. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     app.UseSession(); 

     // Configure the HTTP request pipeline. 
     // Add the console logger. 
     //loggerFactory.MinimumLevel = LogLevel.Information; - moved to appsettings.json -chad 
     loggerFactory.AddConsole(); 
     loggerFactory.AddDebug(); 

     loggerFactory.AddNLog(); 

     // Add the following to the request pipeline only in development environment. 
     if (env.IsDevelopment()) 
     { 
      app.UseBrowserLink(); 
      app.UseDeveloperExceptionPage(); 
      //app.UseDatabaseErrorPage(DatabaseErrorPageOptions.ShowAll); 
     } 
     else 
     { 
      // Add Error handling middleware which catches all application specific errors and 
      // sends the request to the following path or controller action. 
      app.UseExceptionHandler("/Home/Error"); 
     } 

     env.ConfigureNLog("NLog.config"); 

     // Add static files to the request pipeline. 
     app.UseStaticFiles(); 

     // Add cookie-based authentication to the request pipeline. 
     app.UseIdentity(); 

     //SignalR 
     //app.UseSignalR(); 

     // Add MVC to the request pipeline. 
     app.UseMvc(routes => 
     { 
      routes.MapRoute(
      name: "default", 
      template: "{controller}/{action}/{id?}", 
      defaults: new { controller = "Home", action = "Index" } 
      ); 

      // Uncomment the following line to add a route for porting Web API 2 controllers. 
      // routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}"); 
     }); 
    } 

Ve burada Bağlam var:

public class ApplicationUser : IdentityUser 
{ 
    // Add Custom Profile Fields 
    public string Name { get; set; } 
} 

public class LogManagerContext : IdentityDbContext<ApplicationUser> 
{ 
    public DbSet<LogEvent> LogEvents { get; set; } 
    public DbSet<Client> Clients { get; set; } 
    public DbSet<LogEventsHistory> LogEventsHistory { get; set; } 
    public DbSet<LogEventsLineHistory> LogEventsLineHistory { get; set; } 
    public DbSet<LogRallyHistory> LogRallyHistory { get; set; } 
    public DbSet<Flag> Flags { get; set; } 
    protected override void OnModelCreating(ModelBuilder builder) 
    { 

     builder.Entity<LogEvent>().HasKey(x => x.LogId); 
     builder.Entity<LogEvent>().ToTable("LogEvents"); 
     builder.Entity<Client>().HasKey(x => x.ClientId); 
     builder.Entity<Client>().ToTable("Clients"); 
     builder.Entity<LogEventsHistory>().HasKey(x => x.HistoryId); 
     builder.Entity<Flag>().HasKey(x => x.FlagId); 
     builder.Entity<Flag>().ToTable("Flags"); 
     builder.Entity<LogRallyHistory>().HasKey(x => x.HistoryId); 
     builder.Entity<LogEventsLineHistory>().HasKey(x => x.LineHistoryId); 

     base.OnModelCreating(builder); 
    } 

cevap

30

AddDbContext kullanılırsa, o zaman da DBContext tipi bir DbContextOptions kabul sağlamak onun yapıcısında nesne ve DbContext için temel kurucu geçer.

hata mesajı, DbContext (LogManagerContext) bir DbContextOptions kabul eden bir kurucu ihtiyacı olduğunu söylüyor. Ama DbContext’da böyle bir kurucu bulamadım. Bu yüzden kurucunun altına eklemek muhtemelen probleminizi çözer. Yorumlarınız

için

public LogManagerContext(DbContextOptions options) : base(options) 
    { 
    } 

Düzenleme kod aşağıda kullanmak, açıkça IHttpContextAccessor kayıt yoksa:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
+0

tamam, bu yüzden LogManagerContext.cs ekledim ve şimdi daha az bilgi ile farklı bir hata alıyorum: InvalidOperationException: HttpContext boş olmamalıdır. get_Context Ve yine de .PasswordSignInAsync yöntemine adım atamıyorum. –

+1

IHttpContextAccessor'u kaydettirmeyi deneyebilir misiniz? https://github.com/aspnet/Mvc/issues/3936 –

+0

services.AddSingleton () konusuna bakın; services.AddSingleton (); bunu Startup.cs dosyasına ekleyerek bunu düzeltin. Teşekkürler.Bu bağlantıyı yeniden yayınlamak isterseniz, bunu cevap olarak işaretleyeceğim. –

4

Ben ekleyerek bağlantı dizesi yoluyla MyContext içinde Yapılandırma geçersiz kılarak çözmek olabilir DbContextOptionsBuilder:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     if (!optionsBuilder.IsConfigured) 
     { 
      IConfigurationRoot configuration = new ConfigurationBuilder() 
       .SetBasePath(Directory.GetCurrentDirectory()) 
       .AddJsonFile("appsettings.json") 
       .Build(); 
      var connectionString = configuration.GetConnectionString("DbCoreConnectionString"); 
      optionsBuilder.UseSqlServer(connectionString); 
     } 
    } 
+0

Güzel, belki de en önemli satırı unuttum: 'optionsBuilder.UseSqlServer (connectionString);' – mkb