【问题标题】:System.InvalidOperationException: when accessing DbContextSystem.InvalidOperationException:访问 DbContext 时
【发布时间】:2017-05-03 12:30:35
【问题描述】:

运行 .Net Core 应用程序时出现错误。我开始访问 DbContext 并弹出这个

System.InvalidOperationException: '没有为此 DbContext 配置数据库提供程序。可以通过覆盖 DbContext.OnConfiguring 方法或在应用程序服务提供者上使用 AddDbContext 来配置提供者。如果使用了 AddDbContext,则还要确保您的 DbContext 类型在其构造函数中接受 DbContextOptions 对象并将其传递给 DbContext 的基本构造函数。'

我已经尝试修复它,但它仍然出现。

DbContext.cs

public class PartsDbContext : DbContext
{
    public DbSet<Tower> Towers { get; set; }
    public DbSet<Motherboard> Motherboards { get; set; }

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

Controller.cs

public class AdminController : Controller
{
    private readonly PartsDbContext _context;

    public AdminController(PartsDbContext context)
    {
        _context = context;
    }
    public IActionResult Index()
    {
        if (User.Identity.Name == null)
        {
            return RedirectToAction("Register", "Account");
        }
        return View();
    }

    public IActionResult Towers()
    {
        var model = _context.Towers.ToList();
        return View(model);
    }

    public IActionResult Motherboards()
    {
        var model = _context.Motherboards.ToList();
        return View(model);
    }
}

错误显示在 Towers() 中的这一行

var model = _context.Towers.ToList();

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddEntityFramework()
        .AddDbContext<PartsDbContext>();

    services.AddMvc();

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}

任何帮助都会很好。我确定我做错了什么,但我相信我已经做了错误提示的所有事情。

谢谢。

【问题讨论】:

  • 您是否真的在App.config 中配置了DefaultConnection
  • 没有 App.config。我正在使用 ASP.Net Core 1.1,但我不相信它使用 App.config
  • 啊是的,它说这个“DefaultConnection”:“Server=(localdb)\\mssqllocaldb;Database=aspnet-PrecisionCustomPC-b14db89e-86ad-4855-a17f-ac64a04339aa;Trusted_Connection=True;MultipleActiveResultSets=true "

标签: c# entity-framework dbcontext asp.net-core-1.1


【解决方案1】:

您当前的 Startup.cs 文件已为一个数据库 (ApplicationDBContext) 配置了数据库提供程序,但不是您正在使用的数据库 (PartsDbContext)。

所以,添加这些行:

services.AddDbContext<PartsDbContext>(options =>  
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
)

更多信息:https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext#using-dbcontext-with-dependency-injection

【讨论】:

  • 我认为这是假设将 DB 提供程序配置为实体框架: services.AddEntityFramework() .AddDbContext();
  • @JoeHigley,实体框架是一个 ORM,而不是数据库提供者。 DB提供者为SQL、mySql、Oracle等
  • 这已经修复了发布的问题。但是我现在有一个问题,实体框架似乎没有创建任何表。我在与以前相同的行上收到错误消息,但改为显示此消息: System.Data.SqlClient.SqlException: 'Invalid object name 'Towers'.'
  • @JoeHigley 我建议你为此创建一个新问题 :)
  • 我在link 已经这样做了。如果您知道发生了什么,请随时在那里回答。
猜你喜欢
  • 2019-12-29
  • 2011-11-10
  • 1970-01-01
  • 2021-04-27
  • 2018-10-01
  • 1970-01-01
  • 2019-08-24
  • 2020-08-30
  • 1970-01-01
相关资源
最近更新 更多