本文介绍了无法将图式“"中的表"AspNetUsers"用于实体"AspNetUsers",因为该表正用于另一个实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正试图通过扩展AspNetUsers将Identity 3添加到我们现有的客户"应用中.

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继承自IdentityDbContext

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; }
}

我们正在尝试使用Microsoft身份验证.当我运行该应用并使用Microsoft帐户登录时,该应用在此行的AccountController ExternalLoginCallback中爆炸

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);

错误是

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

除了CustomersContext外,没有其他dbContext.除了ApplicationUser之外,我找不到任何映射到AspNetUsers的实体.

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.

推荐答案

IdentityDbContext继承时,无需重新创建AspNet* DbSet,只需添加新表即可.
您的CustomerContext应该看起来像这样:

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; }
}

或者您可以完全创建模型而无需调用base.OnModelCreating,则可以复制OnModelCreating

Or you can completely create the model without calling base.OnModelCreating, you can copy the OnModelCreating from the source code

这篇关于无法将图式“"中的表"AspNetUsers"用于实体"AspNetUsers",因为该表正用于另一个实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 10:25