C# 如何使用IdentityDbContext
在过去的几天里,我一直在玩Asp.net的身份框架 我已经能够让注册和登录工作,但是当我尝试扩展功能以保存针对特定用户的数据时,我发现它与我通常使用股票标准EF实现它的方式不同 通常情况下,我会使用以下方式保存数据:C# 如何使用IdentityDbContext,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,在过去的几天里,我一直在玩Asp.net的身份框架 我已经能够让注册和登录工作,但是当我尝试扩展功能以保存针对特定用户的数据时,我发现它与我通常使用股票标准EF实现它的方式不同 通常情况下,我会使用以下方式保存数据: using(var context = myDbContex()) { context.Add(object); context.SaveChanges(); } 但是,当我在继承IdentityDbContext后尝试使用此方法时,它需要一个参数。我可以创建一个不带
using(var context = myDbContex())
{
context.Add(object);
context.SaveChanges();
}
但是,当我在继承IdentityDbContext后尝试使用此方法时,它需要一个参数。我可以创建一个不带任何参数的默认构造函数吗?或者我应该传入一些东西吗
我的上下文当前如下所示:
public class AppContext : IdentityDbContext<ApplicationUser>
{
//I am not really sure why options needs to be specified as an argument
public AppContext(DbContextOptions<AppContext> options)
: base(options)
{
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<Xxxxx> Xxxxx { get; set; }
public DbSet<Yyyyy> Yyyyy { get; set; }
public DbSet<Zzzzz> Zzzzz { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
}
公共类AppContext:IdentityDbContext
{
//我不太清楚为什么需要将选项指定为参数
公共AppContext(DbContextOptions选项)
:基本(选项)
{
}
公共数据库集应用程序用户{get;set;}
公共数据库集Xxxxx{get;set;}
公共数据库集yyyy{get;set;}
公共DbSet Zzzzz{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
}
}
在Startup.cs中
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppContext>(options =>
options.UseSqlite("Data Source=App.db"));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<AppContext>()
.AddDefaultTokenProviders();
});
public void配置服务(IServiceCollection服务)
{
services.AddDbContext(选项=>
options.UseSqlite(“数据源=App.db”);
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
});
为什么上下文的这个实现不同于标准的dbContext,如何使用这个上下文保存数据
因为这句话,谢谢你
services.AddDbContext<AppContext>(options => options.UseSqlite("DataSource=App.db"));
其次,你可以用不同的方式注册你的上下文
services.AddDbContext<AppContext>();
现在你可以像平常一样使用它了
using(var context = new AppContext())
{
// do stuff
}
编辑:
不是实际问题的一部分,而是由这些类处理登录、注册和角色管理,这些类可以在使用IdentityDbContext时注入
用户管理器,角色管理器和签名管理器。不要直接使用上下文@科里,请考虑一下这件事不,这不是他的问题。再次正确阅读问题。更新答案作为对其他人的提示。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=App.db");
}
using(var context = new AppContext())
{
// do stuff
}