c# - InvalidOperationException:没有为此 DbContext 配置数据库提供程序。可以通过覆盖 DbContext 来配置提供程序
问题描述
我正在处理没有存储库模式的项目。我试图将我的业务逻辑与控制器分开,有点像设置业务层。我执行以下操作来获取我的所有用户。
数据库上下文
public class DatabaseContext : DbContext
{
public DatabaseContext() : base() { }
public DatabaseContext(DbContextOptions options) : base(options) { }
public DbSet<User> Users { get; set; }
public DbSet<OvertimeRequest> OvertimeRequests { get; set; }
public DbSet<HolidayRequest> HolidayRequests { get; set; }
public DbSet<PaymentRequest> PaymentRequests { get; set; }
}
加班申请业务
public class OvertimeRequestBusiness
{
public static OvertimeRequestBusiness Instance { get; } = new
OvertimeRequestBusiness();
public OvertimeRequestBusiness() { }
public async Task<List<User>> GetAllUsersAsync()
{
using (var ctx = new DatabaseContext())
{
var query = ctx.Users;
var res = await query.ToListAsync();
return res;
}
}
}
控制器
[Route("users"), HttpGet]
public async Task<List<User>> GetAllUsers()
{
return await OvertimeRequestBusiness.Instance.GetAllUsersAsync();
}
我得到的错误是
InvalidOperationException:没有为此 DbContext 配置数据库提供程序。可以通过覆盖 DbContext.OnConfiguring 方法或在应用程序服务提供者上使用 AddDbContext 来配置提供者。如果使用 AddDbContext,则还要确保您的 DbContext 类型在其构造函数中接受 DbContextOptions<TContext> 对象并将其传递给 DbContext 的基本构造函数**
解决方案
在不更改的情况下,在类的方法中OvertimeRequestBusiness
设置数据库连接字符串:OnCongfiguring
DbContext
在 `appsettings.json 中设置连接字符串:
"ConnectionStrings": { "MyConnectionString": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-1234;Trusted_Connection=True;MultipleActiveResultSets=true" },
创建
Setting.cs
:public class Setting { public static string ConnectionString { get; set; } }
配置连接字符串
Startup.cs
:Setting.ConnectionString = Configuration.GetSection("ConnectionStrings:MyConnectionString").Value;
修改
DatabaseContext
:public class DatabaseContext : DbContext { public DbSet<User> Users { get; set; } public DbSet<OvertimeRequest> OvertimeRequests { get; set; } public DbSet<HolidayRequest> HolidayRequests { get; set; } public DbSet<PaymentRequest> PaymentRequests { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer(Setting.ConnectionString); } } }
但常见的方法是使用 DbContext 和依赖注入:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
推荐阅读
- elasticsearch - Logstash 文件输入未写入 AWS EC2 上的 Elasticsearch 安装
- flutter - 如何设置 ChangeNotifier 以加载语言环境文件
- r - igraph 中代表最多的 10 个节点的子图
- sass - 我正在尝试使用 Foundation scss 建立一个新网站,但是,每次我尝试运行 sass 时都会出现此错误
- jenkins - Bitbucket webhook 正在触发存储库的所有 Jenkins 作业?
- java - Java中冗长的字符串压缩/解压缩
- kubernetes - GKE 外部负载均衡器配置,NEG 为空,运行状况检查不起作用
- java - 如何读取位于计算机上任何位置的文件?
- python - 在熊猫的另一列下方添加一整列数据
- python - 长数据格式的时差