InitializeSimpleMembershipAttribute返回TargetInvocationException

时间:2013-03-06 18:36:31

标签: c# asp.net-mvc asp.net-membership forms-authentication

我仍然对Visual Studios和C#相对缺乏经验,所以如果没有提供必要的信息或者我的描述中我不清楚,请告诉我。

我在Visual Studio 2010 Web Developer Express中有一个MVC 4项目,我正在尝试设置基本的表单身份验证。我使用ASP.NET配置管理器来设置几个测试用户和角色。 Configuration Manager还在我的App_data文件夹中创建了ASPNETDB.MDF数据库,该数据库已包含在项目中。

我目前正在使用生成的AccountController和Account视图。

每当我尝试访问具有[Authorize]属性的HTTPGET或HTTPPOST方法时,就会从InitializeSimpleMembershipAttribute类中的以下方法抛出TargetInvocationException:

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);
}

查看异常的详细信息时,内部异常指出“无法初始化ASP.NET简单成员资格数据库。”

上述内部异常的内部异常表明它“找不到”给定模型的概念模型类型。

未找到的模型属于从数据库生成的ADO.Net [.edmx]文件。它无法找到的模型按字母顺序排列在数据库中的第一个表/类中,因此它也可能适用于该数据库中的每个类。

我不确定它是否重要,但我使用与ASPNETDB.MDF分开的数据库来存储在网站上输入的信息。

我不明白为什么LazyInitializer.EnsureInitialized()方法可能会导致此问题。

1 个答案:

答案 0 :(得分:0)

您是否检查了WebSecurity.InitializeDatabaseConnection Global.asax.csApplication_Start()使用的连接字符串 - 这可能会导致此问题。

如果指定的连接字符串正确,您确定dbContext连接字符串是正确的:

public SomeContext(): base("MyConnectionStringName")
{
}