Alp*_*Alp 7 asp.net asp.net-mvc entity-framework asp.net-mvc-5 asp.net-identity
如果您有现有数据库,并且要向其中包含Asp.NET Identity表,则可能会遇到此错误.同样在开始时,您可能不知道如何将[AspNetRoles],[AspNetUserClaims],[AspNetUsers],[AspNetUserLogins]表集成到现有数据库中.尽管有很多关于这个主题的资源,但这个答案是最短的答案之一.除了Asp.NET MVC的Asp.NET Identity功能之外,您可能希望在Entity Framework中使用Database-First方法.这是一个非常简短的假人教程.对不起我的英语,如果它很差.
Alp*_*Alp 12
以下是Asp.NET Identity表与现有数据库的最短集成.
1)在Visual Studio(2015或2013)中打开新项目或现有项目.打开服务器资源管理器并打开DefaultConnection.找到您的Identity表.(在WebConfig文件中,localDB connectionstring应该是活动的.并且您的其他现有数据库的连接字符串不应处于活动状态.)双击[AspNetRoles],[AspNetUserClaims],[AspNetUsers],[AspNetUserLogins]表.并复制他们所有的SQL代码.
2)在SQL Server Management Studio中打开现有数据库,右键单击您的数据库,然后单击"在此处查询您在第1部分中复制的内容".你会经历这样的事情:
CREATE TABLE [dbo].[AspNetRoles] (
[Id] NVARCHAR (128) NOT NULL,
[Name] NVARCHAR (256) NOT NULL,
CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO
CREATE UNIQUE NONCLUSTERED INDEX [RoleNameIndex]
ON [dbo].[AspNetRoles]([Name] ASC);
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)
);
GO
CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex]
ON [dbo].[AspNetUsers]([UserName] ASC);
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_UserId]
ON [dbo].[AspNetUserRoles]([UserId] ASC);
GO
CREATE NONCLUSTERED INDEX [IX_RoleId]
ON [dbo].[AspNetUserRoles]([RoleId] ASC);
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),
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);
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),
CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
);
GO
CREATE NONCLUSTERED INDEX [IX_UserId]
ON [dbo].[AspNetUserClaims]([UserId] ASC);
Run Code Online (Sandbox Code Playgroud)
如果您忘记以GO开头的行,您将看到此问题标题中的错误.运行此查询并等待成功创建表.您现有的数据库现在已准备好使用Asp.NET MVC 5的Identity功能.
3)在Visual Studio中打开WebConfig.我们将在这里更改连接字符串.写这个:
<add name="DefaultConnection" connectionString="Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;Persist Security Info=True;User ID=YOUR_USER_ID;Password=YOUR_PASSWORD.;MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient"/>
Run Code Online (Sandbox Code Playgroud)
而不是localDB连接字符串.这是:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-....mdf;Initial Catalog=aspnet-...;Integrated Security=True" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
这就是你需要做的.运行您的项目并注册.您可以在现有数据库的AspNetUsers表中查看新用户数据.
小智 5
在 Visual Studio 中,转到“工具 -> NuGet 包管理器 -> 包管理器控制台”,然后在控制台窗口(在 Visual Studio 内)执行“Update-Database”命令
我遇到了同样的问题,在这里我忘记调用ensureCreated()。调用此方法后,它将创建 Identity 所需的所有表。
启动文件
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
...
// Make sure we have the database
serviceProvider.GetService<ApplicationDbContext>().Database.EnsureCreated();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19535 次 |
| 最近记录: |