Cannot use table 'AspNetUsers' in schema '' for entity 'AspNetUsers' since it is being used for another entity

后端 未结 2 1075
余生分开走
余生分开走 2021-01-21 15:29

We are trying to add Identity 3 to our existing Customers app by extending AspNetUsers

    public class ApplicationUser : IdentityUser
{
    public string Busine         


        
相关标签:
2条回答
  • 2021-01-21 15:59

    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

    0 讨论(0)
  • 2021-01-21 16:16

    I suffered from the same problem using the following scenario:

    1. Scaffolding identity (code first)
    2. Update the same DB with identity tables using migrations (code first)
    3. Scaffold the DB context from the database. (db first)

    Currently I'm trying to use a separate DB for identity for the following gains:

    1. To keep Microsoft identity as a separate module so you can update it or remove it easily from your application.
    2. To create a single sign on architecture between multiple applications.
    3. To keep the application context flexible for both ways, i.e. DB-first or Code-first at any time.

    The challenge now is to use the two databases together at the data tier of the application.

    0 讨论(0)
提交回复
热议问题