c# - c#:没有注册类型 *Context 的服务。数据库连接问题
问题描述
我是 C# 新手,并尝试使用 ASP.NET 核心将数据库连接添加到 MVC 项目:
模型:
实体类用户:
public class User { public string Name { get; set;} public string LastName { get; set; } }
语境:
using Microsoft.EntityFrameworkCore; namespace Forum.Models { public sealed class ForumContext : DbContext { public DbSet<User> Users { get; set;} public ForumContext(DbContextOptions<ForumContext> options) : base(options) { Database.EnsureCreated(); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql("server=localhost;UserId=root;Password=password;database=forum1;"); } } }
类 - 初始化器:
public static class SampleData { public static void Initialize(ForumContext context) { if (!context.Users.Any()) { context.Users.AddRange( new User() { LastName = "last name", Name = "Name" } ); } } }
配置和执行:
appsettings.json:
{ "ConnectionStrings": { "DefaultConnection": "server=localhost;port=3306;user=root;password=password;database=forum1" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
在Sturtup.cs类中,我只修改
ConfigureService
了 MySqlConnection 注入的方法:public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddTransient<MySqlConnection>(_ => new MySqlConnection(Configuration["ConnectionStrings:Default"])); }
和类Program.cs:
public class Program { public static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); using (var scope = host.Services.CreateScope()) { IServiceProvider provider = scope.ServiceProvider; try { //-------------------ERROR---------------------------- var context = provider.GetRequiredService<ForumContext>();//there is the exception was throwed SampleData.Initialize(context); } catch (Exception ex) { var logger = provider.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "An error occurred seeding the DB."); } } host.Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
已安装的软件包:
结果我有以下错误:
解决方案
您必须执行以下ConfigureServices
操作Startup.cs
services.AddDbContext<{yourDBContext_Name}>(options =>
{
options.UseMySql({Your Connection String});
// If it is for Sql Server use options.UseSqlServer({Your Connection String});
});
推荐阅读
- google-bigquery - 为什么 Parquet 文件中的数据在 BigQuery 表中加载后与源数据不匹配
- jquery - 如何根据其他“选择”框中的选定选项设置“选择”框的下拉值
- node.js - MongoDB 引用的集合。创建不生效
- html - CSS“计算”功能在 Internet Explorer 11 中无法按预期工作
- node.js - 节点 puppeteer 在最终页面着陆后生成 cookie(所有重定向完成后)
- mysql - 试图将 zonji 连接到远程数据库
- ruby - 通过创建新的字符串对象来调用字符串上的方法
- java - JacocoReport 配置的 Gradle 6.0 弃用警告
- azure - 如何根据逻辑应用中的条件将主题名称作为参数传递?
- c++ - 需要关于使用 libevent 动态更改计时器事件的建议