3

如果您有一个现有的数据库,并且想要将Asp.NET Identity表包含到它,您可以面对此错误。另外在开始时,您可能不知道如何将[AspNetRoles],[AspNetUserClaims],[AspNetUsers],[AspNetUserLogins]表整合到您现有的数据库中。尽管关于这个话题有很多资源,但这个答案是其中最短的一个。您可能想在Asp.NET MVC的Asp.NET Identity功能旁边的实体框架中使用Database-First方法。这是一个非常简短的傻瓜教程。对不起,我的英文如果不好。Asp.NET MVC 5实体框架中的对象名称'dbo.AspNetUsers'无效

回答

9

这是Asp.NET Identity表与您现有数据库的最短集成。

1)在Visual Studio(2015或2013)中打开新项目或现有项目。打开您的服务器资源管理器并打开您的DefaultConnection。查找您的标识表。 (在WebConfig文件中,localDB连接字符串应该是活动的,并且您的其他现有数据库连接字符串不应该是活动的。)双击您的[AspNetRoles],[AspNetUserClaims],[AspNetUsers],[AspNetUserLogins]表。并复制他们所有的SQL代码。

2)在你的SQL Server Management Studio中打开你现有的数据库,右键点击你的数据库,然后点击新查询在这里过去你在第一部分复制的内容。你将过去的类似的东西:

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

如果忘记了与GO开始的所有行,你会看到究竟是在这个问题上的标题错误。运行此查询并等待成功创建表。您现有的数据库现在已准备好用于Asp.NET MVC 5的标识功能。

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

而不是localDB连接字符串。这是这样的:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-....mdf;Initial Catalog=aspnet-...;Integrated Security=True" providerName="System.Data.SqlClient" /> 

这就是你需要做的。运行你的项目并注册。您可以在现有数据库的AspNetUsers表中看到新的用户数据。

+0

嗨@Alparslan,还有另一种方式来做到这一点。像第3节中所做的那样更改连接字符串。然后在网页上执行注册用户。您将看到正在创建的5个表格。 –

+0

感谢您的回答。我在这里看到了你的解决方案。但是这并不适用于我的情况。或者,也许我做错了什么。我有一些错误。而不是在互联网上研究这些错误,以及如果有人遇到这些错误,他们可以使用这种解决方案。 – Alp

+0

好吧,我明白了。 –

3

在Visual Studio中进入“工具 - > NuGet包管理器 - >软件包管理器控制台”,并在控制台窗口(在Visual Studio中)执行“更新-数据库”命令

1

我经历了这一点。
一段时间用户创建自定义的成员,因此类不asp.net创建AspNetUsers表
例如:

public class Member : IdentityUser 
{ 
    Public int MemberID { get; set; } 
    public string Name { get; set; } 
    public string Family { get; set; } 
    public string Password { get; set; } 

} 

在这种情况下ASP.NET创建成员表中,当用户要进行身份验证,ASP.NET搜索AspNetUsers并没有找到这张表。 这个问题,附加TableAttribute解决了定制开始类的

[Table("AspNetUsers")] 
public class Member : IdentityUser 
{ 
    Public int MemberID { get; set; } 
    public string Name { get; set; } 
    public string Family { get; set; } 
    public string Password { get; set; } 

} 
相关问题