wake-up-neo.net

Ungültiger Objektname "dbo.AspNetUsers" in Asp.NET MVC 5 Entity Framework

Wenn Sie über eine vorhandene Datenbank verfügen und Asp.NET-Identitätstabellen in diese Datenbank aufnehmen möchten, kann dieser Fehler auftreten. Möglicherweise wissen Sie zu Beginn noch nicht, wie Sie [AspNetRoles], [AspNetUserClaims], [AspNetUsers], [AspNetUserLogins] -Tabellen in Ihre vorhandene Datenbank integrieren. Obwohl es zu diesem Thema viele Ressourcen gibt, ist diese Antwort eine der kürzesten. Sie können den Database-First-Ansatz in Entity Framework neben der Asp.NET-Identitätsfunktion von Asp.NET MVC verwenden. Dies ist ein sehr kurzes Tutorial für Dummys. Entschuldigung für mein Englisch, wenn es schlecht ist.

6
Alp

Hier ist die kürzeste Integration von Asp.NET Identity-Tabellen in Ihre vorhandene Datenbank. 

1) Öffnen Sie ein neues Projekt oder Ihr bestehendes Projekt in Visual Studio (2015 oder 2013). Öffnen Sie Ihren Server Explorer und öffnen Sie Ihre DefaultConnection . Finden Sie Ihre Identity-Tabellen. (In der WebConfig-Datei sollte localDB-Verbindungszeichenfolge aktiv sein. Die Verbindungszeichenfolge der anderen vorhandenen Datenbank sollte nicht aktiv sein.) Doppelklicken Sie auf die Tabellen [AspNetRoles], [AspNetUserClaims], [AspNetUsers], [AspNetUserLogins] . Und kopieren Sie alle ihre SQL-Codes. 

2) Öffnen Sie Ihre vorhandene Datenbank in Ihrem SQL Server Management Studio, klicken Sie mit der rechten Maustaste auf Ihre Datenbank und klicken Sie auf New Query hier, was Sie im ersten Teil kopiert haben. Sie werden an so etwas vorbeikommen: 

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

Wenn Sie die Zeilen vergessen, die mit GO beginnen, sehen Sie genau den Fehler, der sich im Titel dieser Frage befindet. Führen Sie diese Abfrage aus und warten Sie, bis die Tabellen erfolgreich erstellt wurden. Ihre vorhandene Datenbank ist jetzt für die Identitätsfunktionen von Asp.NET MVC 5 bereit. 

3) Öffnen Sie WebConfig in Ihrem Visual Studio. Wir ändern hier den String. Schreib Dies:

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

Anstelle der localDB-Verbindungszeichenfolge. Welches ist das:

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

Das ist alles was Sie tun müssen. Führen Sie Ihr Projekt aus und registrieren Sie sich. Sie können Ihre neuen Benutzerdaten in der AspNetUsers-Tabelle in Ihrer vorhandenen Datenbank anzeigen.

14
Alp

In Visual Studio gehen Sie auf "Extras -> NuGet Package Manager -> Package Manager Console" und führen Sie im Konsolenfenster (in Visual Studio) den Befehl "Update-Database" aus

4
Kuleris

Ich habe das erlebt.
Einige Zeit, in der der Benutzer die Klasse für die Mitgliedschaft anpassen kann, erstellt asp.net keine AspNetUsers-Tabelle
Beispiel: 

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

}  

in diesem Szenario erstellt ASP.NET eine Member-Tabelle. Wenn der Benutzer sich authentifizieren möchte, sucht ASP.NET nach AspNetUsers und hat diese Tabelle nicht gefunden. Dieses Problem wurde durch das Hinzufügen von TableAttribute am Anfang der benutzerdefinierten Klasse behoben 

[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; }

}
3
AminM

Ähnlich wie oben können Sie dies in ConfigureServices tun

services.Configure<ApplicationDbContext>(o =>
{
  // Make sure the identity database is created
  .o.Database.Migrate();
});
    //     Applies any pending migrations for the context to the database. Will create the
    //     database if it does not already exist.
    //     Note that this API is mutually exclusive with DbContext.Database.EnsureCreated().
    //     EnsureCreated does not use migrations to create the database and therefore the
    //     database that is created cannot be later updated using migrations.
1
MorbidCamel

Ich hatte das gleiche Problem. Hier habe ich vergessen, EnsureCreated () . Aufzurufen. Nach dem Aufruf dieser Methode werden alle von Identity benötigten Tabellen erstellt.

Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
        ...

        // Make sure we have the database
        serviceProvider.GetService<ApplicationDbContext>().Database.EnsureCreated();
}
0
Nilay