Asp.net core mvc 当一切正常时,如何修复无数据库提供程序的错误
当我想将新对象插入数据库时,出现以下错误: 没有为此DbContext配置数据库提供程序 服务:Asp.net core mvc 当一切正常时,如何修复无数据库提供程序的错误,asp.net-core-mvc,entity-framework-core,Asp.net Core Mvc,Entity Framework Core,当我想将新对象插入数据库时,出现以下错误: 没有为此DbContext配置数据库提供程序 服务: private IConfiguration config; public Startup(IConfiguration config) => this.config = config; public void ConfigureServices(IServiceCollection services) { services.AddEntityFrameworkSql
private IConfiguration config;
public Startup(IConfiguration config) => this.config = config;
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFrameworkSqlServer().AddDbContext<DataContext>(options => options.UseSqlServer(config["ConnectionStrings:MainConnection"]));
services.AddMvc();
}
私有IConfiguration配置;
公共启动(IConfiguration config)=>this.config=config;
public void配置服务(IServiceCollection服务)
{
services.AddEntityFrameworkSqlServer().AddDbContext(options=>options.UseSqlServer(config[“ConnectionStrings:MainConnection”]);
services.AddMvc();
}
数据上下文:
public class DataContext:DbContext
{
public DataContext() { }
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
public DbSet<Request> Request { get; set; }
public DbSet<AdminAccept> AdminAccept { get; set; }
public DbSet<Payment> Payment { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder builder)
{
base.OnConfiguring(builder);
}
}
公共类DataContext:DbContext
{
公共DataContext(){}
公共DataContext(DbContextOptions选项):基本(选项){}
公共数据库集请求{get;set;}
公共数据库集AdminAccept{get;set;}
公共数据库集支付{get;set;}
配置时受保护的覆盖无效(DbContextOptionsBuilder)
{
基础配置(建造商);
}
}
插入命令:
public async Task <int> SaveToStorageAsync()
{
using (DataContext context=new DataContext())
{
context.Request.Add(this);
return await context.SaveChangesAsync();
}
}
public async Task SaveToStorageAsync()
{
使用(DataContext=newdatacontext())
{
context.Request.Add(这个);
返回wait context.SaveChangesAsync();
}
}
然而,成功地创建了迁移和数据库我最终解决了这个问题
一切正常,但使用和表达式会导致错误。(我想知道为什么)
首先,为了解决这个问题,我删除了一个using,并将一个DataContext声明为参数:
public async Task<int> SaveToStorageAsync(DataContext context)
{
context.Request.Add(this);
return await context.SaveChangesAsync();
}
最后通过发送上下文作为参数来调用函数
跳过您在场景中使用的选项,祝您好运,因为您向构造函数注册了
DataContext
,构造函数接收了DbContextOptions选项
。您还需要在创建DataContext时传递该选项
var optionsBuilder = new DbContextOptionsBuilder<DataContext >();
optionsBuilder.UseSqlServer("Your connection string");
using (DataContext context = new DataContext (optionsBuilder.Options))
{
context.Request.Add(this);
return await context.SaveChangesAsync();
}
var optionsBuilder=new DbContextOptionsBuilder();
使用SQLServer(“您的连接字符串”);
使用(DataContext上下文=新的DataContext(optionsBuilder.Options))
{
context.Request.Add(这个);
返回wait context.SaveChangesAsync();
}
我建议您可以在controller中使用dbContext by DI,这是asp.net core中更推荐的方法:
public class StudentsController : Controller
{
private readonly DataContext _context;
public StudentsController(DataContext context)
{
_context = context;
}
public async Task <int> SaveToStorageAsync()
{
_context.Request.Add(this);
return await context.SaveChangesAsync();
}
}
公共类学生控制器:控制器
{
私有只读数据上下文_上下文;
公共学生控制器(DataContext上下文)
{
_上下文=上下文;
}
公共异步任务SaveToStorageAsync()
{
_context.Request.Add(这个);
返回wait context.SaveChangesAsync();
}
}
这两种方式包含在以下链接中:
您是否检查了连接字符串?错误似乎表明连接字符串中的数据库提供程序无法识别。如果连接字符串错误,说明迁移系统工作正常的原因(添加或删除字段)当使用
使用方法时,您还需要传递DbContextOptions。asp.net core中的推荐方法是依赖项注入dbcontext。您可以查看my answer.tnx中的链接以获取答案。请描述更多链接已解释清楚,您根本不需要空构造函数public DataContext(){}
。
public class StudentsController : Controller
{
private readonly DataContext _context;
public StudentsController(DataContext context)
{
_context = context;
}
public async Task <int> SaveToStorageAsync()
{
_context.Request.Add(this);
return await context.SaveChangesAsync();
}
}