即使将DbContextOptions传递给构造函数,也没有为此DbContext配置数据库提供程序

问题描述 投票:0回答:2

我已经在网上看到很多问题,但是答案似乎是要确保您的DbContext类具有DbContextOptions的构造函数。

但是,我已经调试,并且可以看到正在调用正确的构造函数,但是我仍然收到“尚未为此DbContext配置数据库提供程序”错误:(

这里是我Controller.cs中的相关代码:

Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext> options = new Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext>();
using (CoreContext dbContext = new CoreContext(options)) 
{
    dbContext.Person.Add(person);
    dbContext.SaveChanges();
    id = person.PkPersonId;
}

这是我的CoreContext.cs的构造函数:

public CoreContext(DbContextOptions<CoreContext> options)
            : base(options)
        {
        }

这是我的Startup.cs配置方法:

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();

            services.AddIdentity<IdentityUser, IdentityRole>(options => { options.Password.RequiredLength = 10; })
                .AddEntityFrameworkStores<CoreContext>();

            services.AddDbContext<CoreContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));

        }
c# asp.net-mvc entity-framework dbcontext membership-provider
2个回答
1
投票

您需要在DBContext下定义实体详细信息,然后才可以访问数据库实体,否则将收到错误。因此,请按照以下代码解决此问题。

public CoreContext(DbContextOptions<CoreContext> options): base(options)
{
   public virtual DbSet<Person> Persons { get; set; }
}

0
投票

我需要使用容器版本,而不是尝试再次实例化DbContext

因此,只需将Dbcontext注入到我的控制器中:

        private CoreContext _coreContext;

        public AccountController(CoreContext coreContext)
        {
             private CoreContext _coreContext;

然后更改了以下代码:

Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext> options = new Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext>();
using (CoreContext dbContext = new CoreContext(options)) 
{
    dbContext.Person.Add(person);
    dbContext.SaveChanges();
    id = person.PkPersonId;
}

至:

_coreContext.Person.Add(person);
_coreContext.SaveChanges();
id = person.PkPersonId;
© www.soinside.com 2019 - 2024. All rights reserved.