【问题标题】:Migrate Users ASP.NET Web Pages tables to MVC 6将用户 ASP.NET 网页表迁移到 MVC 6
【发布时间】:2017-05-22 00:58:19
【问题描述】:

信息
我想通过重新开始将我的 ASP.NET 网页项目“升级”为 ASP.NET MVC 项目,它只有几页,非常适合学习。

问题
当前项目持有几个用户进行身份验证 ASP.NET 在我的数据库中创建了一些表:

  • 角色
  • 个人资料
  • 用户
  • ...

但是当我使用 MVC 项目时,我看到它为身份验证创建了不同的表:

  • AspNetUserLogins
  • AspNetUserRoles
  • AspNetUser
  • ...

问题
如何迁移我的用户或如何告诉 ASP.net 使用旧表?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core-mvc


    【解决方案1】:

    您可能想从 MVC-Core 中的数据库优先方法开始,但它与您目前看到的有点不同,让我解释一下添加数据库的步骤:

    • 安装实体框架:

    运行Install-Package Microsoft.EntityFrameworkCore.SqlServer

    要从现有数据库启用逆向工程,我们还需要安装几个其他软件包。

    1. 运行安装包Microsoft.EntityFrameworkCore.Tools –Pre
    2. 运行安装包Microsoft.EntityFrameworkCore.Design
    3. 运行安装包Microsoft.EntityFrameworkCore.SqlServer.Design

    现在对您的模型进行逆向工程:

    • 运行以下命令从现有模型创建模型 数据库。如果您收到说明术语的错误 'Scaffold-DbContext' 未被识别为 cmdlet 的名称,则 关闭并重新打开 Visual Studio。

    Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DataBaseName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

    逆向工程过程基于现有数据库的架构创建实体类和派生上下文。实体类是简单的 C# 对象,代表您将要查询和保存的数据。现在您可以创建一个DbContext 类并开始使用您的数据库,至此关于数据库的问题已经结束,现在我建议您阅读有关Identity In Asp.NET Core 的内容。

    【讨论】:

      【解决方案2】:

      感谢this blog,我遇到了这个site

      并根据我的需要进行了编辑:

          /****** Object: Table [dbo].[AspNetRoles] Script Date: 11/14/2013 1:56:03 PM ******/
      SET ANSI_NULLS ON
      GO
      
      SET QUOTED_IDENTIFIER ON
      GO
      
      IF OBJECT_ID('dbo.AspNetUserRoles', 'U') IS NOT NULL
          DROP TABLE [dbo].[AspNetUserRoles]
      GO
      IF OBJECT_ID('dbo.AspNetUserLogins', 'U') IS NOT NULL
          DROP TABLE [dbo].[AspNetUserLogins]
      GO
      IF OBJECT_ID('dbo.AspNetUserClaims', 'U') IS NOT NULL
          DROP TABLE [dbo].[AspNetUserClaims]
      GO
      IF OBJECT_ID('dbo.AspNetRoles', 'U') IS NOT NULL
          DROP TABLE [dbo].[AspNetRoles]
      GO
      IF OBJECT_ID('dbo.AspNetUsers', 'U') IS NOT NULL
          DROP TABLE [dbo].[AspNetUsers]
      GO
      
      CREATE TABLE [dbo].[AspNetUsers] (
          [AccessFailedCount]    INT            NOT NULL,
          [Email]                NVARCHAR (MAX) NULL,
          [EmailConfirmed]       BIT            DEFAULT ((0)) NULL,
          [Id]                   NVARCHAR (128) NOT NULL,
          [LockoutEnabled]       BIT            DEFAULT ((0)) NULL,
          [LockoutEndDateUtc]           DATETIME2 (7)  NULL,
          [PasswordHash]         NVARCHAR (MAX) NULL,
          [PhoneNumber]          NVARCHAR (MAX) NULL,
          [PhoneNumberConfirmed] BIT            DEFAULT ((0)) NULL,
          [SecurityStamp]        NVARCHAR (MAX) NULL,
          [TwoFactorEnabled]     BIT            DEFAULT ((0)) NULL,
          [UserName]             NVARCHAR (MAX) NULL,
          [CreateDate]                              DATETIME       NULL,
          [ConfirmationToken]                       NVARCHAR (128) NULL,
          [IsConfirmed]                             BIT            DEFAULT ((0)) NULL,
          [LastPasswordFailureDate]                 DATETIME       NULL,
          [PasswordFailuresSinceLastSuccess]        INT            DEFAULT ((0)) NULL,
          [PasswordChangedDate]                     DATETIME       NULL,
          [PasswordVerificationToken]               NVARCHAR (128) NULL,
          [PasswordVerificationTokenExpirationDate] DATETIME       NULL,
          CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC)
      );
      GO
      CREATE TABLE [dbo].[AspNetRoles] (
          [Id]   NVARCHAR (128) NOT NULL,
          [Name] NVARCHAR (MAX) NOT NULL,
          CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY CLUSTERED ([Id] ASC)
      );
      GO
      CREATE TABLE [dbo].[AspNetUserRoles] (
          [UserId] NVARCHAR (128) NOT NULL,
          [RoleId] NVARCHAR (128) NOT NULL,
          CONSTRAINT [PK_dbo.AspNetUserRoles] PRIMARY KEY CLUSTERED ([UserId] ASC, [RoleId] ASC),
          CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[AspNetRoles] ([Id]) ON DELETE CASCADE,
          CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
      );
      GO
      CREATE NONCLUSTERED INDEX [IX_RoleId]
          ON [dbo].[AspNetUserRoles]([RoleId] ASC);
      GO
      CREATE NONCLUSTERED INDEX [IX_UserId]
          ON [dbo].[AspNetUserRoles]([UserId] ASC);
      GO
      CREATE TABLE [dbo].[AspNetUserLogins] (
          [UserId]        NVARCHAR (128) NOT NULL,
          [LoginProvider] NVARCHAR (128) NOT NULL,
          [ProviderKey]   NVARCHAR (128) NOT NULL,
          CONSTRAINT [PK_dbo.AspNetUserLogins] PRIMARY KEY CLUSTERED ([UserId] ASC, [LoginProvider] ASC, [ProviderKey] ASC),
          CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
      );
      GO
      CREATE NONCLUSTERED INDEX [IX_UserId]
          ON [dbo].[AspNetUserLogins]([UserId] ASC);
      GO
      CREATE TABLE [dbo].[AspNetUserClaims] (
          [Id]         INT            IDENTITY (1, 1) NOT NULL,
          [ClaimType]  NVARCHAR (MAX) NULL,
          [ClaimValue] NVARCHAR (MAX) NULL,
          [UserId]    NVARCHAR (128) NOT NULL,
          CONSTRAINT [PK_dbo.AspNetUserClaims] PRIMARY KEY CLUSTERED ([Id] ASC),
          CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_User_Id] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
      );
      GO
      CREATE NONCLUSTERED INDEX [IX_User_Id]
          ON [dbo].[AspNetUserClaims]([UserId] ASC);
      GO
      
      INSERT INTO AspNetUsers(Id, UserName, PasswordHash, SecurityStamp,
      CreateDate, ConfirmationToken, IsConfirmed, LastPasswordFailureDate, PasswordFailuresSinceLastSuccess,
      PasswordChangedDate, PasswordVerificationToken, PasswordVerificationTokenExpirationDate,AccessFailedCount,LockoutEndDateUtc)
      SELECT Users.UserId, Users.UserName, Memberships.Password, 
      Memberships.PasswordSalt,  CreateDate, 
      null, 1, '1/1/1977', 0,
      '1/1/2017', null, '1/1/2100',0,'1/1/1977'
      FROM Users
      LEFT OUTER JOIN Memberships ON Users.UserId = Memberships.UserId
      GO
      
      INSERT INTO AspNetRoles(Id, Name)
      SELECT RoleId, RoleName
      FROM Roles
      GO
      
      INSERT INTO AspNetUserRoles(UserId, RoleId)
      SELECT UserId, RoleId
      FROM UsersInRoles
      GO
      
      --INSERT INTO AspNetUserLogins(UserId, LoginProvider, ProviderKey)
      --SELECT UserId, Provider, ProviderUserId
      --FROM Memberships
      --GO
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        • 2015-03-04
        • 2023-01-02
        • 1970-01-01
        相关资源
        最近更新 更多