asp.net - Asp.NET MVC 5 Entity Framework 中的无效对象名称 'dbo.AspNetUsers'

标签 asp.net asp.net-mvc entity-framework asp.net-mvc-5 asp.net-identity

如果您有现有数据库,并且想要将 ASP.NET Identity 表包含到其中,则可能会遇到此错误。开始时,您可能不知道如何将[AspNetRoles]、[AspNetUserClaims]、[AspNetUsers]、[AspNetUserLogins] 表集成到现有数据库中。尽管有很多关于这个主题的资源,但这个答案尽量简短明了。您可能希望将 Entity Framework 中的数据库优先方法与 ASP.NET MVC 的 ASP.NET Identity 功能结合使用。这是一个非常简短的傻瓜教程。如果我的英语很差,我很抱歉。

最佳答案

这是 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 表中查看新用户数据。

关于asp.net - Asp.NET MVC 5 Entity Framework 中的无效对象名称 'dbo.AspNetUsers',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38040976/

相关文章:

wpf - 绑定(bind)到 DbSet<T>.Local 时如何处理 WPF 中的验证?

c# - 在 ASP.NET C# 和 Razor 变量中编写 HTML 代码

javascript - Json序列化: how to send c# data to javascript script.错误:无效字符

c# - 如何使用 tracker-enabled-dbcontext 定位另一个数据库

jquery - ASP MVC4+JQuery 验证不起作用

c# - Controller.Url.HttpRouteUrl() 生成带有 %amp 的错误查询字符串

c# - 通过 Entity Framework 将相关记录插入数据库

c# - 在 IdentityServer3 中处理 CORS 之前发送的飞行前 OPTIONS 请求

javascript - 删除和退格键在 radeditor 中不起作用

asp.net - 如何防止 WebResource.axd 错误的错误消息出现在应用程序日志中?