实体类型"AspNetUserLogins"是否需要定义主键? [英] The entity type 'AspNetUserLogins' requires a primary key to be defined?
问题描述
我用EF架设了数据库,并更改了 mydbcontext
以从 IdentityDbContext
继承,因为我希望所有内容都在一个 dbcontext
下.
I scaffolded my database with EF and I changed the mydbcontext
to inherit from IdentityDbContext
because I want everything under one dbcontext
.
问题是,当我启动应用程序并在登录页面中写入凭据时,出现异常:
The problem is that when I start the application and write the credentials in the login page, I get an exception:
实体类型"AspNetUserLogins"要求定义主键
The entity type 'AspNetUserLogins' requires a primary key to be defined
我以前没得到过,因为我正在调用 base.OnModelCreating(modelBuilder);
我在做什么错了?
which I didn't get before, because I am calling the base.OnModelCreating(modelBuilder);
What am I doing wrong?
public partial class AdventuresContext : IdentityDbContext<ApplicationUser>
{
public AdventuresContext()
{
}
public AdventuresContext(DbContextOptions<AdventuresContext> options)
: base(options)
{
}
public virtual DbSet<Adventures> Adventures { get; set; }
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<AspNetUserTokens> AspNetUserTokens { get; set; }
public virtual DbSet<AspNetUsers> AspNetUsers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Adventures");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasAnnotation("ProductVersion", "2.2.4-servicing-10062");
modelBuilder.Entity<Adventures>(entity =>
{
entity.HasIndex(e => e.UserId);
entity.Property(e => e.CountryCodeIso03from).HasColumnName("CountryCodeISO03From");
entity.Property(e => e.CountryCodeIso03to).HasColumnName("CountryCodeISO03To");
entity.Property(e => e.Name).HasMaxLength(50);
entity.Property(e => e.ShortDescription).HasMaxLength(128);
entity.Property(e => e.Timestamp).IsRowVersion();
entity.Property(e => e.UserId).IsRequired();
entity.HasOne(d => d.User)
.WithMany(p => p.Adventures)
.HasForeignKey(d => d.UserId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Adventures_Adventures");
});
}
}
推荐答案
由于您继承自 IdentityDbContext
,因此无需重新创建 AspNet *
DbSet,I建议您删除所有内置的 DbSet< AspNet *>
和 modelBuilder.Entity< AspNet *>.
Since you inherit from IdentityDbContext
, there is no need for you to recreate AspNet*
DbSet,I suggest you remove all the built-in DbSet<AspNet*>
and modelBuilder.Entity<AspNet*>.
public partial class AdventuresContext : IdentityDbContext<ApplicationUser>
{
public AdventuresContext ()
{
}
public AdventuresContext (DbContextOptions<AdventuresContext> options)
: base(options)
{
}
public virtual DbSet<Adventures> Adventures { get; set; }
//remove below DbSet
//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<AspNetUserTokens> AspNetUserTokens { get; set; }
//public virtual DbSet<AspNetUsers> AspNetUsers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Adventures");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//...
}
}
Startup.cs
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
var conn = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Adventures";
services.AddDbContext<AdventuresContext>(options =>
options.UseSqlServer(conn));
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<AdventuresContext>();
}
这篇关于实体类型"AspNetUserLogins"是否需要定义主键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!