ASP.NET Core MVC中如何使用Entity Context?旧教程适配问题求助
我当年刚从ASP.NET MVC 3转ASP.NET Core的时候,也踩过一模一样的坑!核心问题是:你参考的教程是基于Entity Framework 6(对应MVC3时代的EF),但ASP.NET Core用的是全新的Entity Framework Core,这俩是完全独立的框架,API、配置方式都不一样,所以才会出现DbContext、DbSet不识别,using System.Data.Entity;报错的情况。下面一步步帮你解决:
1. 替换EF相关NuGet包
首先把老版EF的包(如果误装了)删掉,安装EF Core对应SQL Server的包:
- 在NuGet包管理器中安装
Microsoft.EntityFrameworkCore - 安装
Microsoft.EntityFrameworkCore.SqlServer(连接SQL Server必需) - 如果需要数据库迁移工具,再加装
Microsoft.EntityFrameworkCore.Tools
2. 修正实体上下文类的代码
把你原来的MusicStoreEntities类里的命名空间和构造函数改掉,Core版本的代码应该是这样:
using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; namespace MVCMusicStore.Models { public class MusicStoreEntities : DbContext { // 必须添加带DbContextOptions的构造函数,用于依赖注入 public MusicStoreEntities(DbContextOptions<MusicStoreEntities> options) : base(options) { } public DbSet<Album> Albums { get; set; } public DbSet<Genre> Genres { get; set; } } }
注意:
- 把
using System.Data.Entity;替换成using Microsoft.EntityFrameworkCore;,DbContext和DbSet都在这个新命名空间下 - ASP.NET Core中DbContext是通过依赖注入管理的,所以必须添加带
DbContextOptions的构造函数,不能像老版EF那样自动读取web.config的连接字符串
3. 配置连接字符串(替换老版web.config)
ASP.NET Core不再使用web.config存储连接字符串,而是用appsettings.json。打开你的appsettings.json,添加连接字符串配置:
{ "ConnectionStrings": { "MusicStoreEntities": "Server=你的SQL服务器名称;Database=MVCMusicStore;Trusted_Connection=True;TrustServerCertificate=True;" }, // 其他原有配置... }
根据你的SQL Server环境调整:如果是SQL Server认证,要加上User Id=xxx;Password=xxx;
4. 注册DbContext到依赖注入容器
在.NET 6+的项目里,打开Program.cs,添加注册DbContext的代码:
// 注册DbContext,读取appsettings.json里的连接字符串 builder.Services.AddDbContext<MusicStoreEntities>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("MusicStoreEntities")));
如果是.NET 5及更早的项目,在Startup.cs的ConfigureServices方法里添加:
services.AddDbContext<MusicStoreEntities>(options => options.UseSqlServer(Configuration.GetConnectionString("MusicStoreEntities")));
5. 创建数据库迁移并生成数据库
EF Core的迁移命令和老版EF不同,打开Package Manager Console(PMC)执行:
- 初始化迁移:
Add-Migration InitialCreate - 生成数据库:
Update-Database
补充说明
- 老版教程里的
web.config中的<connectionStrings>配置在ASP.NET Core中完全没用,直接忽略即可 - 确保你的
Album和Genre实体类有主键属性(比如public int Id { get; set; }),EF Core会自动识别为主键
按这些步骤改完,你的DbContext和DbSet应该就能正常识别,数据库连接也能正常工作了!
内容的提问来源于stack exchange,提问作者Simplexible

