Vous devez appeler la “WebSecurity.InitializeDatabaseConnection” méthode avant d'appeler une autre méthode de la “WebSecurity” classe
Chaque fois que je redémarre le Débogage sous Visual Studio, j'obtiens cette foutu erreur:
Vous devez appeler la "WebSecurity.InitializeDatabaseConnection" méthode
avant d'appeler une autre méthode de la "WebSecurity" de la classe. Cette
l'appel doit être placé dans un _AppStart.cshtml fichier dans la racine de votre
site.
Mais c'est à chaque fois, et quand j'ai déployer l'application dans prod. J'obtiens cette erreur ici, et puis, au hasard.
Je place le bon tag :
[Authorize(Roles = "admin")]
[InitializeSimpleMembership]
public class IndexController : Controller
de contrôleur et voici le filtre de la façon dont il est. Il juste ne veux travail.
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Threading;
using System.Web.Mvc;
using MeetingTaskManagement.Models;
using WebMatrix.WebData;
namespace MeetingTaskManagement.Filters
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<UsersContext>(null);
try
{
using (var context = new UsersContext())
{
if (!context.Database.Exists())
{
//Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
catch (Exception ex)
{
throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
}
}
}
}
}
quelqu'un peut-il m'aider à régler cette question?
- Je me demande pourquoi la valeur par défaut ASP.NET MVC Internet de projet d'Application ne se contente pas de ce que la réponse suggère hors de la boîte.
- Est ce problème survenant dans ASP.NET MVC 5?
- Non, il n'est pas, à cause MVC 5 est l'aide de WIF. C'est beaucoup mieux.
Vous devez vous connecter pour publier un commentaire.
Supprimer la SimpleMemberShip attribut de votre contrôleurs et des ordures. Ajoutez les lignes suivantes à votre global.asax.
Area
en Application 🙁 Comment le résoudre?Pour simplifier votre Global.asax, vous pouvez mettre le code d'initialisation en
class AuthConfig
comme ceci:Je viens de basculer l' [InitializeSimpleMembership] pour HomeController, et de l'effacer de AccountController. Parce que les initialisations sont faites dans une manière paresseuse.. je veux juste de se précipiter.. et cela a fonctionné!!!
Que j'étais un smartass à l'aide d'un seul contexte, à la fois pour le fournisseur d'appartenances et de mes modèles de domaine. Il s'avère que le problème; vous ne pouvez pas utiliser du fournisseur d'appartenances et de classes du domaine dans un contexte unique.
Vous avez besoin d'avoir les deux contextes.
L'exigence est que pour appeler la WebSecurity Connexion de Base de données, vous pouvez effectuer les opérations suivantes qui est de travail:
Pourquoi ne pas simplement créer la _AppStart.cshtml dans la racine du projet et place le code d'initialisation là que le message d'erreur indique.