C# 如何使用IdentityDbContext

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后尝试使用此方法时,它需要一个参数。我可以创建一个不带

在过去的几天里,我一直在玩Asp.net的身份框架

我已经能够让注册和登录工作,但是当我尝试扩展功能以保存针对特定用户的数据时,我发现它与我通常使用股票标准EF实现它的方式不同

通常情况下,我会使用以下方式保存数据:

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时注入


这是ASP.NET还是ASP.NET核心?请不要标记这两个,请提供如何注册数据库上下文和身份的代码。非常感谢。似乎我有一些关于依赖注入的阅读要做!Yay是一个新事物,即使对微软来说也是如此:这里有一个很好的读物:记住DI和IoC是两个不同的东西。这并没有回答问题中最重要的部分:无论何时需要获取或更改有关用户/角色的信息,都可以使用
用户管理器
角色管理器
签名管理器
。不要直接使用上下文@科里,请考虑一下这件事不,这不是他的问题。再次正确阅读问题。更新答案作为对其他人的提示。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
   optionsBuilder.UseSqlite("Data Source=App.db");
}
using(var context = new AppContext())
{
   // do stuff
}