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
相关产品推荐
相关产品推荐

