How to create ASP.Net Identity tables inside existing database?

后端 未结 4 366
一向
一向 2020-12-13 20:03

I am building my first MVC 5 / Entity Framework application. I used the database first method to pull in my data from an existing SQL server. The existing SQL database rec

相关标签:
4条回答
  • 2020-12-13 20:14

    Will there the user tables be added to the existing sql server, or is this user database a completely separate database?

    You do not need two databases - you can create Identity tables inside your existing database.

    ASP.Net Identity uses Entity Framework Code First. Therefore, before running your application first time, you want to update Connection String same as existing database which is normally inside ApplicationDbContext.

    enter image description here

    If you already have two separate databases and want to merge them, you want to use tools such as RedGate - SQL Compare and Data Compare.

    Merging two database is totally out of original question; please kindly create a separate question if you have one.

    0 讨论(0)
  • 2020-12-13 20:23

    Run this SQL Script on the database.

    /****** Object:  Table [dbo].[AspNetRoles]    Script Date: 15-Mar-17 10:27:06 PM ******/
    
    SET ANSI_NULLS ON
    
    GO
    
    SET QUOTED_IDENTIFIER ON
    
    GO
    
    CREATE TABLE [dbo].[AspNetRoles](
    
        [Id] [nvarchar](128) NOT NULL,
    
        [Name] [nvarchar](256) NOT NULL,
    
    CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY CLUSTERED
    
    (
    
        [Id] ASC
    
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    ) ON [PRIMARY]
    
    
    
    GO
    
    /****** Object:  Table [dbo].[AspNetUserClaims]    Script Date: 15-Mar-17 10:27:06 PM ******/
    
    SET ANSI_NULLS ON
    
    GO
    
    SET QUOTED_IDENTIFIER ON
    
    GO
    
    CREATE TABLE [dbo].[AspNetUserClaims](
    
        [Id] [int] IDENTITY(1,1) NOT NULL,
    
        [UserId] [nvarchar](128) NOT NULL,
    
        [ClaimType] [nvarchar](max) NULL,
    
        [ClaimValue] [nvarchar](max) NULL,
    
    CONSTRAINT [PK_dbo.AspNetUserClaims] PRIMARY KEY CLUSTERED
    
    (
    
        [Id] ASC
    
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    
    
    GO
    
    /****** Object:  Table [dbo].[AspNetUserLogins]    Script Date: 15-Mar-17 10:27:06 PM ******/
    
    SET ANSI_NULLS ON
    
    GO
    
    SET QUOTED_IDENTIFIER ON
    
    GO
    
    CREATE TABLE [dbo].[AspNetUserLogins](
    
        [LoginProvider] [nvarchar](128) NOT NULL,
    
        [ProviderKey] [nvarchar](128) NOT NULL,
    
        [UserId] [nvarchar](128) NOT NULL,
    
    CONSTRAINT [PK_dbo.AspNetUserLogins] PRIMARY KEY CLUSTERED
    
    (
    
        [LoginProvider] ASC,
    
        [ProviderKey] ASC,
    
        [UserId] ASC
    
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    ) ON [PRIMARY]
    
    
    
    GO
    
    /****** Object:  Table [dbo].[AspNetUserRoles]    Script Date: 15-Mar-17 10:27:06 PM ******/
    
    SET ANSI_NULLS ON
    
    GO
    
    SET QUOTED_IDENTIFIER ON
    
    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
    
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    ) ON [PRIMARY]
    
    
    
    GO
    
    /****** Object:  Table [dbo].[AspNetUsers]    Script Date: 15-Mar-17 10:27:06 PM ******/
    
    SET ANSI_NULLS ON
    
    GO
    
    SET QUOTED_IDENTIFIER ON
    
    GO
    
    CREATE TABLE [dbo].[AspNetUsers](
    
        [Id] [nvarchar](128) NOT NULL,
    
        [Email] [nvarchar](256) NULL,
    
        [EmailConfirmed] [bit] NOT NULL,
    
        [PasswordHash] [nvarchar](max) NULL,
    
        [SecurityStamp] [nvarchar](max) NULL,
    
        [PhoneNumber] [nvarchar](max) NULL,
    
        [PhoneNumberConfirmed] [bit] NOT NULL,
    
        [TwoFactorEnabled] [bit] NOT NULL,
    
        [LockoutEndDateUtc] [datetime] NULL,
    
        [LockoutEnabled] [bit] NOT NULL,
    
        [AccessFailedCount] [int] NOT NULL,
    
        [UserName] [nvarchar](256) NOT NULL,
    
    CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED
    
    (
    
        [Id] ASC
    
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserClaims]  WITH CHECK ADD  CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_UserId] FOREIGN KEY([UserId])
    
    REFERENCES [dbo].[AspNetUsers] ([Id])
    
    ON DELETE CASCADE
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserClaims] CHECK CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_UserId]
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserLogins]  WITH CHECK ADD  CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY([UserId])
    
    REFERENCES [dbo].[AspNetUsers] ([Id])
    
    ON DELETE CASCADE
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserLogins] CHECK CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId]
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserRoles]  WITH CHECK ADD  CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId] FOREIGN KEY([RoleId])
    
    REFERENCES [dbo].[AspNetRoles] ([Id])
    
    ON DELETE CASCADE
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserRoles] CHECK CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId]
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserRoles]  WITH CHECK ADD  CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId] FOREIGN KEY([UserId])
    
    REFERENCES [dbo].[AspNetUsers] ([Id])
    
    ON DELETE CASCADE
    
    GO
    
    ALTER TABLE [dbo].[AspNetUserRoles] CHECK CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId]
    
    GO
    
    0 讨论(0)
  • 2020-12-13 20:23

    With DB First, changing the connection string is not going to cause Identity 2.0 to create tables in the DB.

    CORRECTION: I originally had my Identity tables in the DB under an Identity schema and when I registered new users using the below, new tables were written into my DB under the dbo schema.

    You have to create a dummy project first using Code First, build and run the project, go onto the now running app in your web browser, register a user with a dummy email and password, this will cause Entity FrameWork Code First(?) to create all the Identity 2.0 DB tables in your dummy database. You'll then want to export the dummy tables to SQL script and import them into your existing DB that you want to use them in. There should be 5 tables: AspNetUserRoles, AspNetRoles, AspNetUsers, AspNetUserClaims, and AspNetUserLogins.

    I have a ADO.Net Entity Model(.edmx file) for my main DB models and created another .edmx for the Identity Models(I named: IdentityDbEntities). That's when you should change the connection string from "DefaultConnection":

        public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
        {
            public ApplicationDbContext()
                : base("IdentityDbEntitiesString", throwIfV1Schema: false)
            {
            }
    

    VERY IMPORTANT: In your Web.config file, you must add an extra connection string that you'll be using above. Looks like (I'm using a SQL Server Dev environment, so your connection strings could change):

      <connectionStrings>
        <add name="IdentityDbEntitiesString" 
         connectionString="Data Source=#MyServerAddress#; 
            Initial Catalog=#DbName#; 
            Integrated Security=SSPI;" 
         providerName="System.Data.SqlClient" />
        <add name="IdentityDbEntities" 
         connectionString="metadata=res://*/Models.IdentityModel.csdl|
            res://*/Models.IdentityModel.ssdl|
            res://*/Models.IdentityModel.msl;
         provider=System.Data.SqlClient;
         provider connection string=&quot;
         data source=#MyServerAddress#;
         initial catalog=#DbName#;
         integrated security=True;multipleactiveresultsets=True;
         application name=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />         </connectionStrings>
    

    Anything inside #'s like #DbName# will be custom to you.

    0 讨论(0)
  • 2020-12-13 20:27

    I did a sequence of steps:

    Step 1. Create a brand-new (and temporary) project use the template what likes your existing project. When creating new project, you must choose option has Identity, and Individual...

    Step 2. You already have a project. Add Scaffolding items... Choose Identity...

    Step 3. Open Package Manager Console, run command

    Update-Database
    

    you will see at console like this (not exactly like yours, because I use new version of Visual Studio, .NET Core framework, posted time, etc.)

    Each package is licensed to you by its owner. NuGet is not responsible for, nor does it grant any licenses to, third-party packages. Some packages may include dependencies which are governed by additional licenses. Follow the package source (feed) URL to determine any dependencies.
    
    Package Manager Console Host Version 5.5.0.6293
    
    Type 'get-help NuGet' to see all available NuGet commands.
    
    PM> Update-Database
    Build started...
    Build succeeded.
    Microsoft.EntityFrameworkCore.Infrastructure[10403]
          Entity Framework Core 3.1.1 initialized 'ApplicationDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT 1
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (13ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT OBJECT_ID(N'[__EFMigrationsHistory]');
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT 1
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [__EFMigrationsHistory] (
              [MigrationId] nvarchar(150) NOT NULL,
              [ProductVersion] nvarchar(32) NOT NULL,
              CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT 1
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT OBJECT_ID(N'[__EFMigrationsHistory]');
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          SELECT [MigrationId], [ProductVersion]
          FROM [__EFMigrationsHistory]
          ORDER BY [MigrationId];
    Microsoft.EntityFrameworkCore.Migrations[20402]
          Applying migration '00000000000000_CreateIdentitySchema'.
    Applying migration '00000000000000_CreateIdentitySchema'.
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [AspNetRoles] (
              [Id] nvarchar(450) NOT NULL,
              [Name] nvarchar(256) NULL,
              [NormalizedName] nvarchar(256) NULL,
              [ConcurrencyStamp] nvarchar(max) NULL,
              CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id])
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [AspNetUsers] (
              [Id] nvarchar(450) NOT NULL,
              [UserName] nvarchar(256) NULL,
              [NormalizedUserName] nvarchar(256) NULL,
              [Email] nvarchar(256) NULL,
              [NormalizedEmail] nvarchar(256) NULL,
              [EmailConfirmed] bit NOT NULL,
              [PasswordHash] nvarchar(max) NULL,
              [SecurityStamp] nvarchar(max) NULL,
              [ConcurrencyStamp] nvarchar(max) NULL,
              [PhoneNumber] nvarchar(max) NULL,
              [PhoneNumberConfirmed] bit NOT NULL,
              [TwoFactorEnabled] bit NOT NULL,
              [LockoutEnd] datetimeoffset NULL,
              [LockoutEnabled] bit NOT NULL,
              [AccessFailedCount] int NOT NULL,
              CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id])
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [AspNetRoleClaims] (
              [Id] int NOT NULL IDENTITY,
              [RoleId] nvarchar(450) NOT NULL,
              [ClaimType] nvarchar(max) NULL,
              [ClaimValue] nvarchar(max) NULL,
              CONSTRAINT [PK_AspNetRoleClaims] PRIMARY KEY ([Id]),
              CONSTRAINT [FK_AspNetRoleClaims_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [AspNetUserClaims] (
              [Id] int NOT NULL IDENTITY,
              [UserId] nvarchar(450) NOT NULL,
              [ClaimType] nvarchar(max) NULL,
              [ClaimValue] nvarchar(max) NULL,
              CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY ([Id]),
              CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [AspNetUserLogins] (
              [LoginProvider] nvarchar(128) NOT NULL,
              [ProviderKey] nvarchar(128) NOT NULL,
              [ProviderDisplayName] nvarchar(max) NULL,
              [UserId] nvarchar(450) NOT NULL,
              CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey]),
              CONSTRAINT [FK_AspNetUserLogins_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [AspNetUserRoles] (
              [UserId] nvarchar(450) NOT NULL,
              [RoleId] nvarchar(450) NOT NULL,
              CONSTRAINT [PK_AspNetUserRoles] PRIMARY KEY ([UserId], [RoleId]),
              CONSTRAINT [FK_AspNetUserRoles_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE,
              CONSTRAINT [FK_AspNetUserRoles_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE [AspNetUserTokens] (
              [UserId] nvarchar(450) NOT NULL,
              [LoginProvider] nvarchar(128) NOT NULL,
              [Name] nvarchar(128) NOT NULL,
              [Value] nvarchar(max) NULL,
              CONSTRAINT [PK_AspNetUserTokens] PRIMARY KEY ([UserId], [LoginProvider], [Name]),
              CONSTRAINT [FK_AspNetUserTokens_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
          );
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE INDEX [IX_AspNetRoleClaims_RoleId] ON [AspNetRoleClaims] ([RoleId]);
    infoverbose: Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
    : Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE UNIQUE INDEX [RoleNameIndex] ON [AspNetRoles] ([NormalizedName]) WHERE [NormalizedName] IS NOT NULL;
    infoverbose: Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
    : Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE INDEX [IX_AspNetUserClaims_UserId] ON [AspNetUserClaims] ([UserId]);
    infoverbose: Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
    : Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE INDEX [IX_AspNetUserLogins_UserId] ON [AspNetUserLogins] ([UserId]);
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE INDEX [IX_AspNetUserRoles_RoleId] ON [AspNetUserRoles] ([RoleId]);
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE INDEX [EmailIndex] ON [AspNetUsers] ([NormalizedEmail]);
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE UNIQUE INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]) WHERE [NormalizedUserName] IS NOT NULL;
    Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
          VALUES (N'00000000000000_CreateIdentitySchema', N'3.1.1');
    Done.
    PM> 
    

    These SQL scripts are what you need.

    Screenshot is merely for idea illustration

    0 讨论(0)
提交回复
热议问题