ASP.NET Core 2.0连接EF6 DbContext报错求助
解决EF6 Code First DbContext在ASP.NET Core 2.0中的报错问题
我来帮你一步步搞定这个问题,EF6在ASP.NET Core里的配置确实和传统.NET Framework项目有点不一样,咱们从核心问题入手:
1. 先确认NuGet包是否正确安装
EF6和EF Core是完全独立的框架,千万别混装:
- 你的类库项目(存放
DataContext的):确保安装的是EntityFramework 6.x版本(比如最新稳定版6.4.4),不是Microsoft.EntityFrameworkCore系列的包 - ASP.NET Core 2.0项目:同样要安装EntityFramework 6.x,因为要在Core环境中运行EF6的上下文
2. 修改DataContext的构造函数
你当前的无参构造依赖传统的web.config配置,但ASP.NET Core用的是appsettings.json,所以咱们加一个能接收连接字符串的构造函数,兼容两种场景:
public partial class DataContext : DbContext { // 保留原无参构造,兼容类库的旧用法 public DataContext() : base("name=DataContext") { } // 新增构造函数,供Core项目传递连接字符串 public DataContext(string connectionString) : base(connectionString) { } }
3. 在Core项目中配置并注册DataContext
首先确认你的appsettings.json里的连接字符串格式正确,比如:
{ "ConnectionStrings": { "DataContext": "Server=你的服务器;Database=你的数据库;Trusted_Connection=True;" } }
然后打开Startup.cs,在ConfigureServices方法里注册DataContext,用Core的配置系统读取连接字符串:
using Microsoft.Extensions.Configuration; // 替换成你的类库命名空间 using YourDataLibraryNamespace; public class Startup { public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; } public void ConfigureServices(IServiceCollection services) { // 注册DataContext,用Scoped生命周期(EF上下文的推荐生命周期) services.AddScoped<DataContext>(sp => new DataContext(Configuration.GetConnectionString("DataContext"))); // 别忘了添加Mvc服务(如果是MVC项目) services.AddMvc(); } // 其他Configure方法等代码... }
4. 排查常见报错点
- 如果提示“找不到连接字符串DataContext”:检查
appsettings.json里ConnectionStrings的键名是否和GetConnectionString的参数完全一致,大小写也得注意 - 如果出现EF6程序集找不到的错误:确认Core项目的
EntityFramework包版本和类库完全一致,重新还原NuGet包试试 - 如果涉及迁移问题:因为你是基于现有数据库生成的模型,不需要初始化迁移的话,直接忽略迁移相关报错即可;如果需要启用迁移,在Package Manager Console里把类库设为默认项目,执行
Enable-Migrations
这样配置后,你的DataContext就能在ASP.NET Core 2.0项目里正常使用了。
内容的提问来源于stack exchange,提问作者Mukil Deepthi
相关产品推荐
相关产品推荐

