0

我在 VS2012 中创建了一个新网站 - 不是一个项目 - 添加了连接字符串,创建了表,然后使用 ASPNET CONFIGURATION 创建了几个角色和一个用户,这反过来又自动在我的数据库中创建了相应的表:用户、UsersInRoles、角色、成员资格和角色。几乎按预期工作。对于 4.5 (SimpleMembershipProvider),它不会创建所有存储过程,并且额外的代码用于旧的 MemberShipProvider。

我想在 Profile 提供者中添加一些字段,就像我使用 MembershipProvider 一样:

 <properties>
    <add name="myWhatEver" type="System.Int32" allowAnonymous="false"/>
  </properties>

但是当我尝试调用后面的代码时,它说“配置文件”不存在。所以我在网上搜索并使用VS2012阅读,如果你创建一个网站,而不是一个项目,默认情况下它没有配置文件,所以你必须创建一个自定义的。

之后我在 AppCode cs 中添加了以下代码:

命名空间 myNameSpace {

public class UserProfile : ProfileBase
{
    public static UserProfile GetUserProfile(string username)
    {
        return Create(username) as UserProfile;
    }
    public static UserProfile GetUserProfile()
    {
        return Create(Membership.GetUser().UserName) as UserProfile;
    }

    [SettingsAllowAnonymous(false)]
    public string myWhatEver1
    {
        get { return base["myWhatEver1"] as string; }
        set { base["myWhatEver1"] = value; }
    }
}

在 WebConfig 中:

<profile defaultProvider="MYProfileProvider" inherits="myNameSpace.UserProfile">
  <providers>
    <clear />
    <add name="MYProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MYDBConn"/>
  </providers>
</profile>
<membership defaultProvider="MYMembershipProvider">
  <providers>
    <clear />
    <add name="MYMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="MYDBConn"  applicationName="/"/>
  </providers>
</membership>
<roleManager defaultProvider="MYRoleProvider">
  <providers>
    <clear />
    <add name="MYRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="MYDBConn" applicationName="/"/>
  </providers>
</roleManager>

我转到后面的页面,它会识别我的自定义配置文件!我都退出了,直到我运行页面并得到这个:

找不到存储过程“dbo.aspnet_CheckSchemaVersion”。

怎么办?很确定 SimpleMembershiProvider 不使用像 MembershipProvider 这样的存储过程,我真的不想在数据库中安装 MembershipProvider。必须有一些东西我可以添加到我的代码中,这样它才能按原样工作。

有什么建议么??

谢谢。

4

1 回答 1

0

您的 web.config 配置为使用默认提供程序而不是 SimpleMembership 提供程序。您的 web.config 应该看起来像这样才能使用 SimpleMembership。

   <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>

SimpleMembership 提供者不会尝试调用默认提供者使用的存储过程。

此外,在使用 SimpleMembership 时,您不能使用 ASP.NET 配置来创建用户和角色。您必须创建自己的应用程序来执行此操作,或者在创建数据库时为数据库播种,如本文所述。本文以及 Internet 上的大多数其他文章都旨在将 SimpleMembership 与 MVC 结合使用,而不是 Web 窗体。但正如这个 QA指出的那样,它应该适用于 Web 表单。

于 2013-08-07T17:30:02.217 回答