Bir zamanlar göz bebeğimiz olan Asp.Net Web Formlar ile gelen membership yapısı yerini .net core Mvc ile devam eden sürecete migration'a ihtiyaç duyabilir. Microsft bu konu ile ilgili zaten bir makale yayımladı. Arada kalan asp.net Mvc üyelik database aktarımları için şu şekilde bir yol izlenebilir.
Default migration için aşağıdaki script'i çağırabilir.
-- THIS SCRIPT NEEDS TO RUN FROM THE CONTEXT OF THE MEMBERSHIP DB
BEGIN TRANSACTION MigrateUsersAndRoles
USE TargetDatabase
-- INSERT USERS
INSERT INTO TargetDatabase.dbo.AspNetUsers
(Id,
UserName,
PasswordHash,
SecurityStamp,
EmailConfirmed,
PhoneNumber,
PhoneNumberConfirmed,
TwoFactorEnabled,
LockoutEndDateUtc,
LockoutEnabled,
AccessFailedCount,
Email
)
SELECT aspnet_Users.UserId,
aspnet_Users.UserName,
aspnet_Membership.Password,
NewID(),
1,
null,
0,
0,
CASE
WHEN aspnet_Membership.IsLockedOut = 1 THEN Dateadd(year, 1000,Sysutcdatetime())
ELSE NULL
END,
aspnet_Membership.IsLockedOut,
0,
aspnet_Membership.Email
FROM aspnet_Users
LEFT OUTER JOIN aspnet_Membership
ON aspnet_Membership.ApplicationId =
aspnet_Users.ApplicationId
AND aspnet_Users.UserId = aspnet_Membership.UserId
LEFT OUTER JOIN Target.dbo.AspNetUsers
ON aspnet_Membership.UserId = AspNetUsers.Id
WHERE AspNetUsers.Id IS NULL
-- INSERT ROLES
INSERT INTO TargetDatabase.dbo.AspNetRoles(Id, Name)
SELECT RoleId, RoleName
FROM aspnet_Roles;
-- INSERT USER ROLES
INSERT INTO TargetDatabase.dbo.AspNetUserRoles(UserId, RoleId)
SELECT UserId, RoleId
FROM aspnet_UsersInRoles;
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION MigrateUsersAndRoles
RETURN
END
COMMIT TRANSACTION MigrateUsersAndRoles