webentwicklung-frage-antwort-db.com.de

So erstellen Sie ASP.Net-Identitätstabellen in der vorhandenen Datenbank

Ich baue gerade meine erste MVC 5/Entity Framework-Anwendung. Ich habe die erste Datenbankmethode verwendet, um meine Daten von einem vorhandenen SQL-Server abzurufen. Die vorhandene SQL-Datenbank erhält ihre Daten von einer separaten .net-Webformulare. 

In der Zukunft werden die neue MVC-Anwendung und die vorhandene Webformularanwendung die Datenbank gemeinsam nutzen.

Ich verwende Identity, um Benutzerkonten in der MVC-Anwendung zu erstellen. An diesem Punkt habe ich also 2 Datenverbindungen in meiner MVC-Anwendung. Eine für die Benutzerkonten und die andere für den vorhandenen SQL-Server. 

Ist dies der beste Weg, um das MVC-Projekt einzurichten? Kann ich in der Web-Forms-Anwendung auf die Benutzerdatenbank zugreifen? 

Ich bin ein Neuling und möchte sicherstellen, dass ich dies richtig einrichte.

19
Daniela

Werden dort die Benutzertabellen zum vorhandenen SQL-Server hinzugefügt, oder ist diese Benutzerdatenbank eine völlig separate Datenbank?

Sie benötigen keine zwei Datenbanken - Sie können Identity-Tabellen in Ihrer vorhandenen Datenbank erstellen. 

ASP.Net Identity verwendet zuerst Entity Framework Code . Bevor Sie Ihre Anwendung zum ersten Mal ausführen, möchten Sie daher die Verbindungszeichenfolge mit der vorhandenen Datenbank aktualisieren, die normalerweise in ApplicationDbContext liegt. 

enter image description here

Wenn Sie bereits über zwei separate Datenbanken verfügen und diese zusammenführen möchten, möchten Sie Tools wie RedGate - SQL Compare und Data Compare verwenden. 

Das Zusammenführen von zwei Datenbanken ist völlig aus der ursprünglichen Frage. Bitte erstellen Sie eine separate Frage, falls Sie eine haben.

13
Win

Führen Sie dieses SQL-Skript in der Datenbank aus.

/****** 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
5
Mohammed Osman

Bei DB First führt das Ändern der Verbindungszeichenfolge nicht dazu, dass Identity 2.0 Tabellen in der DB erstellt. 

CORRECTION: Ich hatte meine Identity-Tabellen ursprünglich in der DB unter einem Identity-Schema, und als ich neue Benutzer mit dem folgenden registriert habe, wurden neue Tabellen unter dem dbo-Schema in meine DB geschrieben.

Sie müssen zunächst ein Dummy-Projekt mithilfe von Code erstellen. Erstellen und starten Sie das Projekt zuerst, gehen Sie zur aktuell laufenden App in Ihrem Webbrowser, registrieren Sie einen Benutzer mit einer Dummy-E-Mail und einem Kennwort. Dies führt zu Entity FrameWork Code First (?) Erstellen Sie alle Identity 2.0-DB-Tabellen in Ihrer Dummy-Datenbank. Anschließend möchten Sie die Dummy-Tabellen in ein SQL-Skript exportieren und in Ihre vorhandene Datenbank importieren, in der Sie sie verwenden möchten. Es sollten 5 Tabellen vorhanden sein: AspNetUserRoles, AspNetRoles, AspNetUsers, AspNetUserClaims und AspNetUserLogins.

Ich habe ein ADO.Net-Entitätsmodell (.edmx-Datei) für meine Haupt-DB-Modelle und ein weiteres .edmx für die Identitätsmodelle (ich nannte: IdentityDbEntities). Dann sollten Sie die Verbindungszeichenfolge von "DefaultConnection" ändern:

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

SEHR WICHTIG: In Ihrer Datei Web.config müssen Sie eine zusätzliche Verbindungszeichenfolge hinzufügen, die Sie oben verwenden. Sieht so aus (ich verwende eine SQL Server Dev-Umgebung, daher könnten sich Ihre Verbindungszeichenfolgen ändern):

  <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>

Alles in # wie # DbName # wird für Sie benutzerdefiniert sein.

0
anacrust