WebSite中的SimpleMembershipProvider with Profile

时间:2013-08-07 16:17:04

标签: asp.net .net-4.5 simplemembership sqlprofileprovider

我在VS2012中创建了一个新的WebSite - 不是项目 - 添加了连接字符串,创建了表,然后使用ASPNET CONFIGURATION创建了几个角色和一个用户,后者又自动在我的数据库中创建了适当的表:用户,UsersInRoles,角色,会员和ROLES。几乎按预期工作。使用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。必须有一些我可以添加到我的代码中的东西,所以它按原样运行。

有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分: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配置创建用户和角色。您必须创建自己的应用程序才能执行此操作,或在数据库创建为described in this article时为其设置种子。本文以及Internet上的大多数其他文章都是为了将​​SimpleMembership与MVC结合使用,而不是使用Web表单。但正如this QA指出它应该适用于Web窗体。