3

我有一个现有的 ASP.NET Web 窗体站点,我正在升级到 ASP.NET MVC4 Web 应用程序。

看起来应该可以将我现有的会员数据库与SimpleMembershipProvider默认情况下使用的 MVC4 Web 应用程序一起使用。

问题是 SimpleMembershipProvider 期望该UserId列的类型为int,而我现有的数据库使用guid.

这是我的相关部分web.config

<membership defaultProvider="SqlMembershipProvider">
  <providers>
    <remove name="SqlMembershipProvider"/>
    <add
      name="SqlMembershipProvider"
      connectionStringName="LocalSqlServer"
      enablePasswordRetrieval="false"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="false"
      requiresUniqueEmail="false"
      passwordFormat="Hashed"
      applicationName="/"
      maxInvalidPasswordAttempts="10"
      minRequiredPasswordLength="1"
      minRequiredNonalphanumericCharacters="0"
      passwordAttemptWindow="10"
      passwordStrengthRegularExpression=""
      type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership>

尝试更改密码,例如,我得到RuntimeBinderException

“无法将类型 'System.Guid' 转换为 'int'”。

我的主要问题是:理想情况下,我想保持现有数据库完整,并配置 MVC Web 应用程序以使用它。如何配置我的 MVC4 Web 应用程序以使用我现有的数据库(带有GUID UserId's)作为成员数据库?

作为第二个问题:我想我可以将UserId列更改为int; 有没有人预见到任何问题,或者知道最好的方法?


这是我能找到的使用UserId类型的最佳线索:http GUID: //aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3573751-use-generic-types-for-userid-in-简单会员-

4

1 回答 1

4

我找到了解决方法:

  • 将提供程序类型更改回System.Web.Security.SqlMembershipProvider
  • 修改以使用和类而不是类来AccountController执行操作MembershipFormsAuthenticationWebSecurity
  • 删除了SimpleMembershipProvider属性AccountController

例如,要验证登录并设置 cookie:

if (ModelState.IsValid && Membership.ValidateUser(model.UserName, model.Password)) 
{
    FormsAuthentication.SetAuthCookie(model.UserName,false);
    return RedirectToLocal(returnUrl);
}
于 2013-12-30T22:59:32.783 回答