0

Ich benutze ASP.NET Core mit Identität und möchte Standard Db-Kontext zu erweitern. Wenn ich nicht verknüpfte Tabelle hinzufügen möchten füge ich nur eine neue Klasse:Hinzufügen neuer Entitäten zu DbContext

public partial class Table1 
{ 
    public int Id { get; set; } 
    public string Txt { get; set; } 
} 

und meine ApplicationDbContext erweitern:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
     : base(options) 
    { 
    } 

    public virtual DbSet<Table1> Table1 { get; set; } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 
     // Customize the ASP.NET Identity model and override the defaults if needed. 
     // For example, you can rename the ASP.NET Identity table names and more. 
     // Add your customizations after calling base.OnModelCreating(builder); 

     builder.Entity<Table1>(entity => 
     { 
      entity.ToTable("Table_1"); 

      entity.Property(e => e.Id).HasColumnName("ID"); 

      entity.Property(e => e.Txt) 
       .IsRequired() 
       .HasMaxLength(50); 
     }); 
    } 
} 

dann eine Migration und update db erstellen. Es klappt. Aber wenn ich eine neue Tabelle hinzugefügt werden soll, die von IdentityDbContext Tabelle verknüpft:

public partial class Users 
{ 
    public int Id { get; set; } 
    public string UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public virtual AspNetUser User { get; set; } 
} 

natürlich AspNetUser Klasse existiert nicht (es durch IdentityDbContext erstellt wird, wie ich sie verstehe). Wie mache ich das richtig?

Antwort

1

Die Klasse wird höchstwahrscheinlich ApplicationUser (Standard) genannt. Die Tabelle, die diese Entität darstellt, ist , aber das wird durch Identity festgelegt und hat nichts mit dem Klassennamen zu tun.

FWIW, obwohl, ist es eine schlechte Idee, eine Users Einheit zu schaffen, für eine Reihe von Gründen:

  1. Es zweifellos Verwirrung zwischen Users und ApplicationUser sowie die Datenbanktabellen dbo.Users und dbo.AspNetUsers sein .

  2. Im Allgemeinen sollten Sie Ihre Entitäten im Singular Tempus nennen, d. H. User, nicht Users. Es gibt eine ganze Reihe von Gründen für diese Konvention, aber es reicht aus zu sagen, dass es Ihren Code besser und lesbarer macht, um bei Singular Singles und Plural für Plural Singles zu bleiben. Eine Eigenschaft vom Typ ICollection<User> würde beispielsweise Users heißen, da sie aus vielen User Instanzen besteht.

  3. Was Sie tun, ist völlig unnötig. Der vollständige Grund für die Existenz von Identity besteht darin, dass die Mitgliedschaft (das vorherige Authentifizierungs- und Autorisierungsframework von ASP.NET) es nicht erlaubte, die beteiligten Typen zu erweitern. Identität ändert all dies und ist in jeder Hinsicht 100% erweiterbar. Sie haben vollen Zugriff auf alle Entitäten, die am Framework beteiligt sind, und Sie können sie hinzufügen und daraus ableiten. Wenn Sie in Ihrem System zusätzliche Eigenschaften für "Benutzer" hinzufügen möchten, fügen Sie sie einfach direkt zur Klasse ApplicationUser hinzu.

+0

Ich habe es hinzuzufügen, da es bereits Projekt abgeschlossen ist, basierend auf Mitgliedschaft Provider –

+0

Identität und Mitgliedschaft sich gegenseitig aus. Entweder Sie aktualisieren auf Identität oder bleiben bei der Mitgliedschaft. Sie sollten auf keinen Fall versuchen, beides gleichzeitig zu verwenden. –

Verwandte Themen