Asp.net

Asp.NET MVC 5 Entity Framework 中的對象名稱“dbo.AspNetUsers”無效

  • December 30, 2021

如果您有一個現有的數據庫,並且想要將 ASP.NET 標識表包含在其中,則可能會遇到此錯誤。你可能不知道如何整合**$$ AspNetRoles $$,$$ AspNetUserClaims $$,$$ AspNetUsers $$,$$ AspNetUserLogins $$**開始時將表導入現有數據庫。儘管有很多關於這個主題的資源,但這個答案試圖簡短而中肯。您可能希望將 Entity Framework 中的 Database-First 方法與 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 的身份功能。

  1. 在 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 表中查看新使用者數據。

引用自:https://stackoverflow.com/questions/38040976