.NET Core Web应用项目添加Identity时出错求助
现有ASP.NET Core 7.0项目脚手架Identity登录功能报错问题
我按照官方文档步骤为现有ASP.NET Core 7.0项目添加登录功能时,执行Identity脚手架操作出现错误。相关截图如下:
操作界面截图:
错误界面截图:
我的soa_dbContext代码如下:
public partial class soa_dbContext : DbContext { public soa_dbContext() { } public soa_dbContext(DbContextOptions<soa_dbContext> options) : base(options) { } public virtual DbSet<Artikel> Artikels { get; set; } = null!; public virtual DbSet<Locatie> Locaties { get; set; } = null!; public virtual DbSet<Rol> Rols { get; set; } = null!; public virtual DbSet<SoaBepaling> SoaBepalings { get; set; } = null!; public virtual DbSet<Status> Statuses { get; set; } = null!; public virtual DbSet<User> Users { get; set; } = null!; internal static object Where(Func<object, bool> value) { throw new NotImplementedException(); } }
问题根源
soa_dbContext仅继承基础DbContext,未继承Identity必需的IdentityDbContext,脚手架无法识别该上下文用于身份验证存储。- 自定义的静态
Where方法会干扰EF Core查询逻辑,导致脚手架反射时出错。 - 若
User类未继承IdentityUser,Identity无法将其识别为合法用户实体。
解决步骤
1. 修改DbContext继承关系并清理冗余代码
将soa_dbContext改为继承IdentityDbContext<User>,同时删除多余的Where方法:
public partial class soa_dbContext : IdentityDbContext<User> { public soa_dbContext() { } public soa_dbContext(DbContextOptions<soa_dbContext> options) : base(options) { } // 保留原有业务实体DbSet public virtual DbSet<Artikel> Artikels { get; set; } = null!; public virtual DbSet<Locatie> Locaties { get; set; } = null!; public virtual DbSet<Rol> Rols { get; set; } = null!; public virtual DbSet<SoaBepaling> SoaBepalings { get; set; } = null!; public virtual DbSet<Status> Statuses { get; set; } = null!; // 移除自定义Users DbSet,IdentityDbContext已内置用户相关存储 // public virtual DbSet<User> Users { get; set; } = null!; }
2. 确保User类继承IdentityUser
修改User类,使其继承IdentityUser以支持Identity身份验证功能:
public class User : IdentityUser { // 可添加自定义用户字段,如姓名、部门等 }
3. 配置Identity服务
在Program.cs中配置DbContext和Identity服务:
// 配置DbContext连接 builder.Services.AddDbContext<soa_dbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("soa_dbContextConnection"))); // 添加Identity服务,指定用户实体和DbContext builder.Services.AddDefaultIdentity<User>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<soa_dbContext>();
4. 重新执行脚手架操作
打开Visual Studio的Identity脚手架工具,选择更新后的soa_dbContext,勾选需要生成的登录、注册等页面,重新执行生成操作。
内容的提问来源于stack exchange,提问作者YassirZz
相关产品推荐
相关产品推荐

