Asp.net mvc 4 如何从SimpleMembership迁移到ASP.NET.Identity

Asp.net mvc 4 如何从SimpleMembership迁移到ASP.NET.Identity,asp.net-mvc-4,asp.net-mvc-5,asp.net-identity,simplemembership,Asp.net Mvc 4,Asp.net Mvc 5,Asp.net Identity,Simplemembership,从MVC4迁移到MVC5,我也想使用ASP.NET标识,但我很难找到任何能够涵盖迁移标识所需的所有操作的内容。建议我所需要做的就是创建一个ApplicationUser并迁移数据,其他web搜索为我提供sql脚本和passowrd哈希建议。但是,在我加入之前,我还想澄清一下其他一些未解决的问题 首先-我有代码在种子方法中初始化成员系统: if (!WebSecurity.Initialized) WebSecurity.InitializeDatabaseConnection(Confi

从MVC4迁移到MVC5,我也想使用ASP.NET标识,但我很难找到任何能够涵盖迁移标识所需的所有操作的内容。建议我所需要做的就是创建一个
ApplicationUser
并迁移数据,其他web搜索为我提供sql脚本和passowrd哈希建议。但是,在我加入之前,我还想澄清一下其他一些未解决的问题

首先-我有代码在种子方法中初始化成员系统:

if (!WebSecurity.Initialized)
    WebSecurity.InitializeDatabaseConnection(Config.ConnectionStringName,
        Config.UsersTableName,
        Config.UsersIDColumn,
        Config.UserNameColumn,
        autoCreateTables: true);
所以这需要继续下去,对吗

第二,看起来我需要一个
IdentityDbContext
。那么,我应该改变现有的上下文来继承它吗

i、 e.代替我的当前代码
公共类SID2013Context:DbContext
执行以下操作:
公共类SID2013Context:IdentityDbContext

这是否会生成一个迁移,创建支持ASP.NET标识所需的新表

完成后,我应该能够引入为MVC5项目生成的
AccountController
、视图、视图模型和启动代码


有人能回答这里的具体问题和/或给我指一个更好的资源吗?

我意识到我在问题中链接到的网站告诉你如何迁移到
Identity
表,但仍然使用
SimpleMembership
。我希望在整个过程中使用Identity,因此我使用visualstudio创建了一个空的MVC应用程序,以便可以复制我想要的代码并进行修复。以下是让登录和注销正常工作所遵循的步骤:

  • ApplicationUser.cs
    添加到我的模型项目中
  • 已将
    IdentityConfig.cs
    添加到我的应用程序启动文件夹
  • Startup.Auth.cs
    添加到我的应用程序启动文件夹
  • AccountController.cs
    添加到我的控制器文件夹(重命名为现有控制器)
  • Startup.cs
    添加到根文件夹
  • AccountViewModels.cs
    添加到ViewModels文件夹
  • 将我的上下文更改为继承
    IdentityDbContext
    (这确实意味着在迁移中创建了新表)
  • 添加了所需的NuGet包并修复了所有名称空间
  • 项目现在构建
  • 但是
    添加迁移
    给出了一个错误。。。“EntityType IdentityUserRole没有定义键”
  • …通过在我的覆盖中添加对
    base.OnModelCreating
    的调用,解决了这个问题
  • 添加迁移
    &
    更新数据库
    -添加所需的表
  • UserProfile
    中将我的自定义字段添加到
    ApplicationUser
    并更新了数据库
  • 使用sql(在迁移中)将数据从旧表复制到新表。这里包括Sql。注意:需要使用Guid填充
    SecurityStamp
    ,以防止登录时出错
  • 登录和注销都能正常工作
  • 删除了
    UserProfile
    SimpleRoleProvider
    RoleManager
    类-必要时更换代码
  • 删除了对
    WebMatrix.Data
    WebMatrix.WebData
    dll的引用
  • 从web.config中删除了
  • 步骤14中使用的Sql:

    INSERT INTO dbo.aspnetusers (id
    , email
    , emailconfirmed
    , passwordhash
    , securitystamp
    , phonenumber
    , phonenumberconfirmed
    , twofactorenabled
    , lockoutenddateutc
    , lockoutenabled
    , accessfailedcount
    , username
    , organisationid
    , firstname
    , lastname
    , inactive)
        SELECT
            u.id,
            u.username Email,
            m.isconfirmed EmailConfirmed,
            m.password PasswordHash,
            --SignInManager.PasswordSignInAsync (used in Login method) 
            --throws an exception http://stackoverflow.com/a/23354148/150342
            NEWID() SecurityStamp, 
            u.telephone PhoneNumber,
            CASE
                WHEN u.telephone IS NULL THEN 0
                ELSE 1
            END PhoneNumberConfirmed,
            0 TwoFactorEnabled,
            NULL LockoutEndDateUtc,
            0 LockoutEnabled,
            m.passwordfailuressincelastsuccess AccessFailedCount,
            u.username,
            u.organisationid,
            u.firstname,
            u.lastname,
            u.inactive
        FROM dbo.userprofiles u
            INNER JOIN dbo.webpages_membership m
                ON m.userid = u.id
        WHERE NOT EXISTS (SELECT
            1
        FROM dbo.aspnetusers
        WHERE id = u.id)
    
    INSERT INTO dbo.aspnetroles (id
    , name)
        SELECT
            roleid,
            rolename
        FROM dbo.webpages_roles r
        WHERE NOT EXISTS (SELECT
            1
        FROM dbo.aspnetroles
        WHERE roleid = r.roleid)
    
     INSERT INTO dbo.aspnetuserroles (userid
        , roleid)
            SELECT
                userid,
                roleid
            FROM dbo.webpages_usersinroles ur
            WHERE NOT EXISTS (SELECT
                1
            FROM dbo.aspnetuserroles
            WHERE userid = ur.userid
            AND roleid = ur.roleid)
    

    我希望它对您有用,我喜欢使用identity,请留下旧的注意:这篇引用的文章是从Sql成员身份的迁移,它是Simplemembership之前的早期版本。为什么他们没有提供单独的文章我不知道:(我把它放在一个答案中,但它被删除了-不知道为什么。无论如何,这对我很有帮助:还有这个:@Simon_Weaver,这是我在问题和回答中提到的链接。它告诉你如何迁移到标识表,但仍然使用
    SimpleMembership
    。我想一直使用
    Identity