【问题标题】:ASP .Net membership and membership classASP .Net 成员和成员类
【发布时间】:2012-10-09 18:01:27
【问题描述】:

几个问题:

我在 app_data 文件夹下创建了一个数据库。无论如何将此数据库与也在同一文件夹下的现有 aspnetdb 关联?如果可以,有人可以指导我吗?

如果不是,那么在 APP_CODE 文件夹下创建我自己的数据库的最佳方法是什么,该文件夹也将利用 asp .net 成员资格?我的意思是我可以在代码中检查用户名和角色(如果 User.IsinRole("........") 等,并使用项目内的图标打开会员页面并添加/修改/删除用户吗?

谢谢

【问题讨论】:

    标签: asp.net aspnetdb


    【解决方案1】:

    您需要做的就是将连接字符串更改为指向同一个数据库。当然,您必须将架构从一个复制到另一个,以及您需要的任何数据。

    【讨论】:

    • 好吧,这听起来像是我所追求的。我怎么能复制模式呢?我想这会使我编写的所有会员代码保持不变?
    • 方法很多。如果您使用的是实体框架,则根据您做事的方式,它可以重新生成您的架构。或者您可以将您的架构编写为文本文件,然后只需更改数据库名称......基本上,但是您首先创建的表是您再次执行的操作。
    • 奇怪的是,我创建了一个空站点并且没有任何 Web 配置条目来显示 aspnetdb 的连接字符串,尽管它确实运行/工作。我最初所做的是添加了创建 aspnetdb 的登录控件,然后手动创建了我的第二个数据库。所以在这种情况下,我假设您建议创建 aspnetdb,然后手动添加我自己的表?
    【解决方案2】:

    您可以创建 MembershipProvider。代码项目中提供了一个示例,Custom Membership Providers

    【讨论】:

      【解决方案3】:

      您可以创建自定义Membership Provider,因为您有自定义数据库,而不是使用 aspnet_regsql 生成的数据库。

      public class CustomMembershipProvider : MembershipProvider
      {   
          public override MembershipUser CreateUser(string username, 
             string password, string email, string passwordQuestion, 
             string passwordAnswer, bool isApproved, 
             object providerUserKey, out MembershipCreateStatus status)
          {
              throw new NotImplementedException();
          }
      
          public override MembershipUser GetUser(string username, bool userIsOnline)
          {
              throw new NotImplementedException();
          }
      
          public override bool ValidateUser(string username, string password)
          {
              throw new NotImplementedException();
          }
      
          public override int MinRequiredPasswordLength
          {
              get { throw new NotImplementedException(); }
          }
      
          public override bool RequiresUniqueEmail
          {
              get { throw new NotImplementedException(); }
          }
      }
      

      您注册了您的会员服务提供商

      <connectionStrings>
          <add name="ApplicationServices" 
            connectionString="Server=your_server;Database=your_db;
                               Uid=your_user_name;Pwd=your_password;"
            providerName="System.Data.SqlClient" />
      </connectionStrings>
      
      <authentication mode="Forms">
        <forms loginUrl="~/Account/LogOn" timeout="2880" />
      </authentication>
      
      <membership defaultProvider="CustomMembershipProvider">
        <providers>
          <clear/>
          <add name="CustomMembershipProvider" 
              type="CustomMembership.Models.CustomMembershipProvider"
              connectionStringName="AppDb"
              enablePasswordRetrieval="false"
              enablePasswordReset="true"
              requiresQuestionAndAnswer="false"
              requiresUniqueEmail="false"
              maxInvalidPasswordAttempts="5"
              minRequiredPasswordLength="6"
              minRequiredNonalphanumericCharacters="0"
              passwordAttemptWindow="10"
              applicationName="/" />
        </providers>
      

      【讨论】:

      • 这个问题是什么让您认为需要自定义会员服务提供商?他似乎只是不想使用两个数据库,并将他的表和 asp.net 表放在同一个数据库中。只需要更改连接字符串即可。
      • @Mystere 因为他创建了您的自定义数据库,所以数据库的架构是自定义的 => 所以他需要自定义服务才能将他的对象创建为会员用户
      • 我在他的问题中没有看到任何地方说他创建了自定义会员模式。他在谈论使用 asp.net 和使用他自己的表(与成员资格无关)
      • 伙计们不要试图让自己感到困惑:(我确实写了“这也将利用 asp .net 会员资格?我的意思是我可以在代码中检查用户名和角色(如果用户。 IsinRole("........") 等并使用项目内的图标打开会员页面并添加/修改/删除用户?”换句话说,我希望所有基本功能都使用 ASP .Net会员资格和我的第二个数据库 - 都在一个数据库下,但也能够使用通常的方法访问 asp .Net 管理中心来创建角色/用户等。谢谢
      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2011-06-05
      相关资源
      最近更新 更多