我已经在网上看到很多问题,但是答案似乎是要确保您的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")));
}
您需要在DBContext下定义实体详细信息,然后才可以访问数据库实体,否则将收到错误。因此,请按照以下代码解决此问题。
public CoreContext(DbContextOptions<CoreContext> options): base(options)
{
public virtual DbSet<Person> Persons { get; set; }
}
我需要使用容器版本,而不是尝试再次实例化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;