MVC 5 Code Erstes Hinzufügen neuer databasetabelle mit UserId

Also jetzt meine IdentityModels.cs sieht so aus:

using System; using System.Data.Entity; using System.Security.Claims; using System.Security.Policy; using System.Threading.Tasks; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using System.Collections.Generic; using System.Web.Mvc; using System.Linq; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Leepio.Models { // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. public class ApplicationUser : IdentityUser { public string FirstName { get; set; } public string LastName { get; set; } public string City { get; set; } //company [Display(Name = "Virkshomedsnavn")] public string CompanyName { get; set; } public string ZipCode { get; set; } //company public int NrEmployees { get; set; } //company public string WorkField { get; set; } public string Language { get; set; } //Student public string University { get; set; } public string StudyProgramme { get; set; } public int Semester { get; set; } public string GraduationDate { get; set; } // [AllowHtml] public string Description { get; set; } //Student public string Skills { get; set; } public string Website { get; set; } public string Address { get; set; } //Student [DataType("date")] public DateTime DateOfBirth { get; set; } public virtual ICollection<Blog> Blogs { get; set; } public virtual ICollection<Application> Applications { get; set; } public virtual ICollection<Project> Project { get; set; } public virtual IList<Experience> Experience { get; set; } public virtual ICollection<Skill> Skill { get; set; } public virtual IList<Education> Education { get; set; } public virtual IEnumerable<Experience> ExperienceOrdered { get { return Experience.OrderByDescending(e => e.EndYear); } } public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) { // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // Add custom user claims here return userIdentity; } } public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } public System.Data.Entity.DbSet<Leepio.Models.Project> Projects { get; set; } public System.Data.Entity.DbSet<Leepio.Models.NewsletterMails> NewsletterMails { get; set; } public System.Data.Entity.DbSet<Skill> Skill { get; set; } public System.Data.Entity.DbSet<Leepio.Models.Application> Applications { get; set; } public System.Data.Entity.DbSet<Leepio.Models.Contract> Contracts { get; set; } public System.Data.Entity.DbSet<Leepio.Models.Experience> Experience { get; set; } public System.Data.Entity.DbSet<Leepio.Models.Blog> Blogs { get; set; } public DbSet<Category> Categories { get; set; } public DbSet<Education> Educations { get; set; } } } 

Was ich tun möchte, ist, durch Code (Migrationen), fügen Sie eine neue Tabelle als Erweiterungen der Benutzer-Tabelle (AspNetUsers) durch Code, wenn ich einen neuen Benutzer mit data aus Facebook, die data, die ich nicht Notwendigkeit für die Hauptbenutzertabelle kann zum zweiten gehen, lasst uns sagen, nennen Sie es "FBData" mit dem entsprechenden userId. Um es in die Perspektive zu stellen: Registrierungsbenutzer würde UserID, FirstName, LastName, E-Mail an Benutzer-Tabelle hinzufügen und gleichzeitig ID und Locale, Gender in der FBData-Tabelle hinzufügen.

Microsoft Identity verwendet AspNetUserClaims, um alle zusätzlichen data zu speichern, die Sie in Ihrer ApplicationUser-modelklasse angegeben haben. Wenn Sie externen authenticationsanbieter wie Facebook, Google usw. verwenden, wird ein neuer Eintrag in der AspNetUserLogins-Tabelle erstellt, um den ProviderKey zu speichern. Diese button wird verwendet, wenn sich der Benutzer zum zweiten Mal bei Ihrer Anwendung anmeldet.

Für mein Verständnis ist Ihr Plan, eine FBData-Tabelle zu erstellen, nicht unbedingt gut. Wie wär's mit der Google-authentication? Werden Sie eine GData-Tabelle erstellen?

Die beste Option wäre in Ihrem AccountController in ExternalLoginCallback (function ausgetriggers, wenn der Benutzer von Ihrem externen authenticationsanbieter auf Ihre Seite umgeleitet wird), was Sie von facebook zu Ihrem ApplicationUser erhalten haben und eventuell den Benutzer zum Registrierungsformular mit Pre- bevölkerte Felder, um den Registrierungszyklus zu beenden. Alle Trash-data können Sie speichern, wenn Sie in einer separaten Tabelle AspNetUserClaims_External aber Sie müssen es zuerst zu modellieren.

Überprüfen Sie: https://github.com/Identityserver/Identityserver4.Samples/tree/dev/Quickstarts/4_ImplicitFlowAuthenticationWithExternal

Es gibt ein paar Dinge, die du tun musst. Zuerst können Sie eine FbData-class mit den properties erstellen, die Sie in dieser Tabelle benötigen. Fügen Sie dann die properties hinzu, die Sie zur ApplicationUser-class benötigen. Sie benötigen den Fremdschlüssel für die FbData-Tabelle

 public int FbDataId { get; set; } 

und du musst auch die virtuelle Eigenschaft für die Tabelle hinzufügen:

 public virtual ICollection<FbData> FbDatas { get; set; } 

Letzter in deinem IdentityContext füge Dir DbSet für deine Tabelle hinzu:

 public DbSet<FbData> FbData { get; set; } 

Führen Sie die Anwendung auf eine saubere db, um zu sehen, Ihre Änderungen reflektiert ..

Sie können die OnModelCreating-class auch in Ihrem IdentityContext überschreiben, um Änderungen an den generierten Identitätstabellen vorzunehmen.