We are trying to add Identity 3 to our existing Customers app by extending AspNetUsers
public class ApplicationUser : IdentityUser
{
public string Busine
As you inherit from IdentityDbContext
, you don't need to recreate AspNet*
DbSet, just add your new table.
Your CustomersContext should look like that:
public partial class CustomersContext : IdentityDbContext<ApplicationUser>
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlServer(@"Server=(localdb)\\mssqllocaldb;Database=Customers;Trusted_Connection=True;MultipleActiveResultSets=true");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);// we have to do this because we are inheriting from IdentityDbContext<ApplicationUser> not DbContext
// override the users tables with your properties
modelBuilder.Entity<ApplicationUser>(entity =>
{
entity.HasIndex(e => e.BusinessName).HasName("BusinessNameIndex");
entity.HasIndex(e => e.NormalizedEmail).HasName("EmailIndex");
entity.HasIndex(e => e.NormalizedUserName).HasName("UserNameIndex");
entity.Property(e => e.Id).HasMaxLength(450);
entity.Property(e => e.AddressLabel)
.HasMaxLength(255)
.HasColumnType("varchar");
entity.Property(e => e.BusinessName)
.HasMaxLength(255)
.HasColumnType("varchar");
entity.Property(e => e.ContactName)
.HasMaxLength(255)
.HasColumnType("varchar");
entity.Property(e => e.CountryCode)
.IsRequired()
.HasMaxLength(2)
.HasColumnType("varchar")
.HasDefaultValue("00");
entity.Property(e => e.FollowUp).HasColumnType("date");
entity.Property(e => e.MailingList).HasDefaultValue(true);
entity.HasOne(d => d.Country).WithMany(p => p.Users).HasForeignKey(d => d.CountryCode).OnDelete(DeleteBehavior.Restrict);
entity.HasOne(d => d.Subscription).WithMany(p => p.Users).HasForeignKey(d => d.SubscriptionId).OnDelete(DeleteBehavior.Restrict);
});
modelBuilder.Entity<Countries>(entity =>
{
entity.HasKey(e => e.CountryCode);
entity.Property(e => e.CountryCode)
.HasMaxLength(2)
.HasColumnType("varchar");
entity.Property(e => e.CalCost).HasColumnType("decimal");
entity.Property(e => e.CountryName)
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar");
entity.Property(e => e.CultureCode)
.IsRequired()
.HasMaxLength(8)
.HasColumnType("varchar");
entity.Property(e => e.CurrencyCode)
.IsRequired()
.HasMaxLength(3)
.HasColumnType("varchar");
entity.Property(e => e.InvoiceFooter)
.HasMaxLength(50)
.HasColumnType("varchar");
entity.Property(e => e.InvoiceName)
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar");
entity.Property(e => e.TaxName)
.HasMaxLength(3)
.HasColumnType("varchar");
entity.Property(e => e.TaxRate).HasColumnType("decimal");
});
modelBuilder.Entity<Devices>(entity =>
{
entity.HasKey(e => e.DeviceID);
entity.Property(e => e.CALs).HasDefaultValue(0);
entity.Property(e => e.DeviceName)
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar");
entity.Property(e => e.UnlockedFrom).HasColumnType("date");
entity.Property(e => e.UnlockedTo).HasColumnType("date");
entity.Property(e => e.UserId)
.IsRequired()
.HasMaxLength(450);
entity.HasOne(d => d.User).WithMany(p => p.Devices).HasForeignKey(d => d.UserId).OnDelete(DeleteBehavior.Restrict);
});
modelBuilder.Entity<Downloads>(entity =>
{
entity.HasKey(e => e.DownloadId);
entity.Property(e => e.DownloadDate).HasColumnType("date");
entity.Property(e => e.DownloadVersion)
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar");
entity.Property(e => e.UserId)
.IsRequired()
.HasMaxLength(450);
entity.HasOne(d => d.User).WithMany(p => p.Downloads).HasForeignKey(d => d.UserId).OnDelete(DeleteBehavior.Restrict);
});
modelBuilder.Entity<Invoices>(entity =>
{
entity.HasKey(e => e.InvoiceNr);
entity.Property(e => e.AddressLabel)
.IsRequired()
.HasMaxLength(255)
.HasColumnType("varchar");
entity.Property(e => e.InvoiceDate).HasColumnType("date");
entity.Property(e => e.InvoiceDescription)
.IsRequired()
.HasMaxLength(255)
.HasColumnType("varchar");
entity.Property(e => e.InvoiceNet).HasColumnType("money");
entity.Property(e => e.InvoiceTax).HasColumnType("money");
entity.Property(e => e.InvoiceTotal).HasColumnType("money");
entity.Property(e => e.UserId)
.IsRequired()
.HasMaxLength(450);
entity.HasOne(d => d.User).WithMany(p => p.Invoices).HasForeignKey(d => d.UserId).OnDelete(DeleteBehavior.Restrict);
});
modelBuilder.Entity<Notes>(entity =>
{
entity.HasKey(e => e.NoteId);
entity.Property(e => e.NoteDate).HasColumnType("date");
entity.Property(e => e.NoteSubject)
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar");
entity.Property(e => e.NoteText)
.IsRequired()
.HasColumnType("varchar");
entity.Property(e => e.UserId)
.IsRequired()
.HasMaxLength(450);
entity.HasOne(d => d.User).WithMany(p => p.Notes).HasForeignKey(d => d.UserId).OnDelete(DeleteBehavior.Restrict);
});
modelBuilder.Entity<ReferralSources>(entity =>
{
entity.HasKey(e => e.ReferralSourceId);
entity.Property(e => e.ReferralSourceName)
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar");
});
modelBuilder.Entity<Referrals>(entity =>
{
entity.HasKey(e => e.ReferralId);
entity.Property(e => e.ReferralDate).HasColumnType("date");
entity.Property(e => e.UserId)
.IsRequired()
.HasMaxLength(450);
entity.HasOne(d => d.ReferralSource).WithMany(p => p.Referrals).HasForeignKey(d => d.ReferralSourceID).OnDelete(DeleteBehavior.Restrict);
entity.HasOne(d => d.User).WithMany(p => p.Referrals).HasForeignKey(d => d.UserId).OnDelete(DeleteBehavior.Restrict);
});
modelBuilder.Entity<Subscriptions>(entity =>
{
entity.HasKey(e => e.SubscriptionId);
entity.Property(e => e.SubscriberId)
.IsRequired()
.HasMaxLength(450);
entity.Property(e => e.SubscriptionExpires).HasColumnType("date");
entity.Property(e => e.TotalCALs).HasDefaultValue(0);
});
}
public virtual DbSet<Countries> Countries { get; set; }
public virtual DbSet<Devices> Devices { get; set; }
public virtual DbSet<Downloads> Downloads { get; set; }
public virtual DbSet<Invoices> Invoices { get; set; }
public virtual DbSet<Notes> Notes { get; set; }
public virtual DbSet<ReferralSources> ReferralSources { get; set; }
public virtual DbSet<Referrals> Referrals { get; set; }
public virtual DbSet<Subscriptions> Subscriptions { get; set; }
}
Or you can completely create the model without calling base.OnModelCreating
, you can copy the OnModelCreating
from the source code
I suffered from the same problem using the following scenario:
Currently I'm trying to use a separate DB for identity for the following gains:
The challenge now is to use the two databases together at the data tier of the application.