18

Sto costruendo la mia prima applicazione MVC 5/Entity Framework. Ho usato il primo metodo del database per inserire i miei dati da un server SQL esistente. Il database SQL esistente riceve i suoi dati da un'applicazione web .net separata.Come creare tabelle di identità ASP.Net all'interno del database esistente?

In seguito, la nuova applicazione MVC e l'applicazione di moduli Web esistenti condivideranno il database.

Sto utilizzando Identity per creare account utente all'interno dell'applicazione MVC. Quindi, a questo punto, ho 2 connessioni dati nella mia applicazione MVC. Uno per gli account utente e l'altro per il server SQL esistente.

È questo il modo migliore per impostare il progetto MVC? Andando avanti, potrò accedere al database degli utenti dall'applicazione web form?

Sono un novizio, e voglio assicurarmi che lo stia configurando correttamente.

+0

I moduli Web possono utilizzare Identità. Utilizzare VS2013 per creare un nuovo progetto Web Forms e assicurarsi che "Account individuali" sia selezionato. Potrebbe essere necessario effettuare l'aggiornamento a .NET 4.5 per trarne vantaggio. – mason

+0

È possibile inserire tabelle di identità ASP.Net all'interno del database esistente - [Come aggiungere l'autenticazione di identità MVC5 ASP.NET al database esistente] (http://stackoverflow.com/a/25651908/296861) – Win

+0

Grazie per la rapida risposta. So che questa è una domanda per principianti: non ho ancora pubblicato il mio sito, quindi il database utente sembra esistere solo all'interno del mio progetto MVC. Verranno aggiunte le tabelle utente al server sql esistente oppure questo database utente è un database completamente separato? In tal caso, sarebbe una buona pratica unire i 2 database? – Daniela

risposta

12

Verranno aggiunte le tabelle utente al server sql esistente oppure questo database utente è un database completamente separato?

Non sono necessari due database: è possibile creare tabelle di identità all'interno del database esistente.

L'identità di ASP.Net utilizza Codice quadro entità Primo. Pertanto, prima di eseguire l'applicazione per la prima volta, si desidera aggiornare Connection String come nel database esistente che si trova normalmente all'interno di ApplicationDbContext.

enter image description here

Se si dispone già di due database separati e desidera unire loro, si consiglia di utilizzare strumenti come Redgate - SQL Compare e Confronto dati.

L'unione di due database è totalmente fuori questione originale; cortesemente, crea una domanda a parte se ne hai una.

0

Con DB Per prima cosa, la modifica della stringa di connessione non determinerà la creazione di tabelle nel DB da parte di Identity 2.0.

CORREZIONE: Originariamente avevo le tabelle Identity nel DB in uno schema Identity e quando ho registrato nuovi utenti utilizzando il sotto, nuove tabelle sono state scritte nel mio DB sotto lo schema dbo.

È necessario creare un progetto fittizio prima utilizzando Code First, creare ed eseguire il progetto, passare all'app ora in esecuzione nel browser Web, registrare un utente con una e-mail fittizia e una password, questo causerà Entity FrameWork Code First (?) per creare tutte le tabelle del DB Identity 2.0 nel tuo database fittizio. Dovrai quindi esportare le tabelle fittizie nello script SQL e importarle nel DB esistente in cui desideri utilizzarle. Dovrebbero esserci 5 tabelle: AspNetUserRoles, AspNetRoles, AspNetUsers, AspNetUserClaims e AspNetUserLogins.

Ho un modello di entità ADO.Net (file .edmx) per i miei modelli di DB principali e ho creato un altro .edmx per i modelli di identità (che ho chiamato: IdentityDbEntities). Questo è quando si deve modificare la stringa di connessione da "DefaultConnection":

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

MOLTO IMPORTANTE: del Web.file di configurazione, è necessario aggiungere una stringa di connessione aggiuntiva che verrà utilizzata in precedenza. Sembra che (sto usando un ambiente SQL Server Dev, in modo che le stringhe di connessione potrebbero cambiare):

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

nulla all'interno # s 'come # DbName # sarà personalizzato da voi.

2

Eseguire questo Script SQL nel 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 
Problemi correlati