Asp.net mvc 4 如何从SimpleMembership迁移到ASP.NET.Identity
从MVC4迁移到MVC5,我也想使用ASP.NET标识,但我很难找到任何能够涵盖迁移标识所需的所有操作的内容。建议我所需要做的就是创建一个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
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
(这确实意味着在迁移中创建了新表)添加迁移
给出了一个错误。。。“EntityType IdentityUserRole没有定义键”base.OnModelCreating
的调用,解决了这个问题添加迁移
&更新数据库
-添加所需的表UserProfile
中将我的自定义字段添加到ApplicationUser
并更新了数据库SecurityStamp
,以防止登录时出错UserProfile
、SimpleRoleProvider
和RoleManager
类-必要时更换代码WebMatrix.Data
和WebMatrix.WebData
dll的引用
和
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