我们正在尝试通过扩展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以外的AspNetUsers的实体。
没有迁移。如果我尝试创建初始迁移,也会发生同样的错误。
dnx ef migrations add initial
道歉所包含的代码数量,但不包括那些关键信息。
答案 0 :(得分:3)
当您从IdentityDbContext
继承时,您无需重新创建AspNet*
DbSet,只需添加新表即可。
您的CustomersContext应如下所示:
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
答案 1 :(得分:0)
在以下情况下,我遇到了相同的问题:
目前,我正在尝试使用一个单独的DB进行身份验证,以获取以下好处:
现在的挑战是在应用程序的数据层一起使用两个数据库。