We are trying to add Identity 3 to our existing Customers app by extending AspNetUsers
public class ApplicationUser : IdentityUser
{
public string BusinessName { get; set; }
public string ContactName { get; set; }
public string CountryCode { get; set; }
public virtual Countries Country { get; set; }
public string AddressLabel { get; set; }
public string Phone { get; set; }
public DateTime? FollowUp { get; set; }
public bool MailingList { get; set; }
public int SubscriptionId { get; set; }
[ForeignKey("SubscriptionId")]
public virtual Subscriptions Subscription { get; set; }
public virtual ICollection<Devices> Devices { get; set; }
public virtual ICollection<Downloads> Downloads { get; set; }
public virtual ICollection<Invoices> Invoices { get; set; }
public virtual ICollection<Notes> Notes { get; set; }
public virtual ICollection<Referrals> Referrals { get; set; }
}
CustomersContext inherits from IdentityDbContext
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 becauee we are inheriting from IdentityDbContext<ApplicationUser> not DbContext
modelBuilder.Entity<AspNetRoleClaims>(entity =>
{
entity.Property(e => e.RoleId).HasMaxLength(450);
entity.HasOne(d => d.Role).WithMany(p => p.AspNetRoleClaims).HasForeignKey(d => d.RoleId);
});
modelBuilder.Entity<AspNetRoles>(entity =>
{
entity.HasIndex(e => e.NormalizedName).HasName("RoleNameIndex");
entity.Property(e => e.Id).HasMaxLength(450);
entity.Property(e => e.Name).HasMaxLength(256);
entity.Property(e => e.NormalizedName).HasMaxLength(256);
});
modelBuilder.Entity<AspNetUserClaims>(entity =>
{
entity.Property(e => e.UserId).HasMaxLength(450);
entity.HasOne(d => d.User).WithMany(p => p.AspNetUserClaims).HasForeignKey(d => d.UserId);
});
modelBuilder.Entity<AspNetUserLogins>(entity =>
{
entity.HasKey(e => new { e.LoginProvider, e.ProviderKey });
entity.Property(e => e.LoginProvider).HasMaxLength(450);
entity.Property(e => e.ProviderKey).HasMaxLength(450);
entity.Property(e => e.UserId).HasMaxLength(450);
entity.HasOne(d => d.User).WithMany(p => p.AspNetUserLogins).HasForeignKey(d => d.UserId);
});
modelBuilder.Entity<AspNetUserRoles>(entity =>
{
entity.HasKey(e => new { e.UserId, e.RoleId });
entity.Property(e => e.UserId).HasMaxLength(450);
entity.Property(e => e.RoleId).HasMaxLength(450);
entity.HasOne(d => d.Role).WithMany(p => p.AspNetUserRoles).HasForeignKey(d => d.RoleId).OnDelete(DeleteBehavior.Restrict);
entity.HasOne(d => d.User).WithMany(p => p.AspNetUserRoles).HasForeignKey(d => d.UserId).OnDelete(DeleteBehavior.Restrict);
});
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.Email).HasMaxLength(256);
entity.Property(e => e.FollowUp).HasColumnType("date");
entity.Property(e => e.MailingList).HasDefaultValue(true);
entity.Property(e => e.NormalizedEmail).HasMaxLength(256);
entity.Property(e => e.NormalizedUserName).HasMaxLength(256);
entity.Property(e => e.UserName).HasMaxLength(256);
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<AspNetRoleClaims> AspNetRoleClaims { get; set; }
public virtual DbSet<AspNetRoles> AspNetRoles { get; set; }
public virtual DbSet<AspNetUserClaims> AspNetUserClaims { get; set; }
public virtual DbSet<AspNetUserLogins> AspNetUserLogins { get; set; }
public virtual DbSet<AspNetUserRoles> AspNetUserRoles { get; set; }
public virtual DbSet<ApplicationUser> ApplicationUser { get; set; }
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; }
}
We are trying to use Microsoft authentication. When I run the app and login using Microsoft Account then the app blows up in the AccountController
ExternalLoginCallback
on this line
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
The error is
Cannot use table 'AspNetUsers' in schema '' for entity 'AspNetUsers' since it is being used for another entity.
There is no other dbContext other than CustomersContext. I can't find any entities mapping to AspNetUsers other than ApplicationUser.
There are no migrations. The same error also occurs if I try to create an initial migration.
dnx ef migrations add initial
Apologies for the amount of code included and yet not including that critical piece of information whatever it is.