【发布时间】:2016-01-03 09:23:12
【问题描述】:
我们正在尝试通过扩展 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; }
}
CustomersContext 继承自 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,我找不到任何映射到 AspNetUser 的实体。
没有迁移。如果我尝试创建初始迁移,也会出现同样的错误。
dnx ef migrations add initial
对包含的代码量表示歉意,但不包括关键信息。
【问题讨论】:
标签: asp.net-core asp.net-core-mvc entity-framework-core asp.net-identity-3