gpt4 book ai didi

asp.net-core - 无法将模式“”中的表“AspNetUsers”用于实体“AspNetUsers”,因为该表正用于另一个实体

转载 作者:行者123 更新时间:2023-12-01 16:02:14 25 4
gpt4 key购买 nike

我们正在尝试通过扩展AspNetUsers将Identity 3添加到我们现有的“客户”应用中

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

CustomerContext继承自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中爆炸
 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的任何实体。

没有迁移。如果我尝试创建初始迁移,也会发生相同的错误。
dnx ef migrations add initial

很抱歉,所包含的代码数量尚未包括任何关键信息。

最佳答案

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

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 from the source code

关于asp.net-core - 无法将模式“”中的表“AspNetUsers”用于实体“AspNetUsers”,因为该表正用于另一个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34575020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com