Как создать таблицы ASP.Net Identity внутри существующей базы данных?
Я создаю свое первое приложение MVC 5/Entity Framework. Я использовал первый метод базы данных для вывода моих данных с существующего SQL-сервера. Существующая база данных SQL получает данные из отдельного приложения web-форм .net.
Перемещение вперед, новое приложение MVC и существующее приложение веб-форм будут совместно использовать базу данных.
Я использую Identity для создания учетных записей пользователей в приложении MVC. Итак, на данный момент у меня есть 2 подключения к данным в моем приложении MVC. Один для учетных записей пользователей, а другой для существующего SQL-сервера.
Это лучший способ настроить проект MVC? Двигаясь вперед, смогу ли я получить доступ к пользовательской базе данных из приложения веб-форм?
Я новичок, и я хочу убедиться, что правильно настроил его.
Ответы
Ответ 1
Будут ли добавлены пользовательские таблицы к существующему серверу sql или эта пользовательская база данных полностью отдельная база данных?
Вам не нужны две базы данных - вы можете создавать таблицы Identity внутри существующей базы данных.
Идентификатор ASP.Net использует Код структуры Entity Framework. Поэтому перед запуском приложения в первый раз вы хотите обновить Connection String так же, как и существующую базу данных, которая обычно находится внутри ApplicationDbContext.
![enter image description here]()
Если у вас уже есть две отдельные базы данных и вы хотите их объединить, вы хотите использовать такие инструменты, как RedGate - SQL Compare и Data Compare.
Объединение двух баз данных полностью исключает исходный вопрос; пожалуйста, создайте отдельный вопрос, если у вас есть.
Ответ 2
Запустите этот SQL Script в базе данных.
/****** 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
Ответ 3
С БД Во-первых, изменение строки подключения не приведет к созданию Identity 2.0 для создания таблиц в БД.
КОРРЕКЦИЯ: Я первоначально имел свои таблицы Identity в БД под схемой Identity, и когда я зарегистрировал новых пользователей, используя ниже, новые таблицы были записаны в мою БД под схемой dbo.
Сначала вы должны создать фиктивный проект, используя Code First, создать и запустить проект, перейти на текущее приложение в своем веб-браузере, зарегистрировать пользователя с фиктивным адресом электронной почты и паролем, это вызовет Entity FrameWork Code First (?) для создания всех таблиц DB Identity 2.0 в вашей фиктивной базе данных. Затем вы захотите экспортировать фиктивные таблицы в SQL script и импортировать их в свою существующую БД, в которую вы хотите их использовать. Там должно быть 5 таблиц: AspNetUserRoles, AspNetRoles, AspNetUsers, AspNetUserClaims и AspNetUserLogins.
У меня есть модель Entity Model ADO.Net(файл .edmx) для моих основных моделей БД и создан еще один .edmx для моделей идентичности (я назвал IdentityDbEntities). Это, когда вы должны изменить строку подключения из "DefaultConnection":
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("IdentityDbEntitiesString", throwIfV1Schema: false)
{
}
ОЧЕНЬ ВАЖНО:
В файле Web.config вы должны добавить дополнительную строку подключения, которую вы будете использовать выше. Похоже (я использую среду SQL Server Dev, поэтому ваши строки подключения могут меняться):
<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="
data source=#MyServerAddress#;
initial catalog=#DbName#;
integrated security=True;multipleactiveresultsets=True;
application name=EntityFramework""
providerName="System.Data.EntityClient" /> </connectionStrings>
Все, что внутри #, например # DbName #, будет для вас обычным.