You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC添加EF控制器时数据上下文类不显示的问题

问题解决步骤

你的核心问题是BlogContext使用了Entity Framework 6的命名空间System.Data.Entity,但ASP.NET Core项目必须使用Entity Framework Core(EF Core),两者API不兼容,导致脚手架无法识别你的数据上下文类。

1. 替换EF6依赖为EF Core

先确保项目已安装EF Core相关NuGet包,比如Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer,可根据你的数据库类型选择对应包。

2. 修改BlogContext代码

替换命名空间和EF Core兼容的写法:

using Microsoft.EntityFrameworkCore;

namespace WebApplication1.Models
{
    public class BlogContext : DbContext
    {
        // EF Core推荐通过依赖注入传递配置选项
        public BlogContext(DbContextOptions<BlogContext> options) : base(options)
        {
            // 可选:确保数据库存在(仅用于快速测试,生产环境推荐用迁移)
            // Database.EnsureCreated();
        }

        public DbSet<Blog> Bloglar { get; set; }
        public DbSet<Category> Kategoriler { get; set; }

        // 若需自定义模型配置或种子数据,重写此方法
        // protected override void OnModelCreating(ModelBuilder modelBuilder)
        // {
        //     // 示例:添加种子数据
        //     modelBuilder.Entity<Category>().HasData(
        //         new Category { Id = 1, Name = "技术" },
        //         new Category { Id = 2, Name = "生活" }
        //     );
        // }
    }
}

3. 在Program.cs注册DbContext

ASP.NET Core需要将DbContext注入到服务容器:

var builder = WebApplication.CreateBuilder(args);

// 注册BlogContext,配置数据库连接字符串
builder.Services.AddDbContext<BlogContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("blogDb")));

// 注册MVC服务(若未添加)
builder.Services.AddControllersWithViews();

var app = builder.Build();

// 配置HTTP请求管道
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

4. 配置连接字符串

在appsettings.json中添加数据库连接字符串:

{
  "ConnectionStrings": {
    "blogDb": "Server=(localdb)\\mssqllocaldb;Database=blogDb;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

5. 重新尝试脚手架操作

  • 清理项目(右键项目 → 清理),然后重新生成(右键项目 → 生成)
  • 再次添加“使用Entity Framework的MVC控制器(带视图)”,此时应该能在数据上下文类下拉框中看到BlogContext,手动输入也不会再报错

额外说明

  • EF6和EF Core是独立框架,ASP.NET Core不支持EF6,必须使用EF Core API
  • 原代码中的Database.SetInitializer在EF Core中被迁移(Migration)替代,推荐使用Add-Migration和Update-Database命令管理数据库结构

内容的提问来源于stack exchange,提问作者silagdk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25