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

EF6从.NET Framework 4.7迁移至.NET Standard 2.1相关问题咨询

EF6 Database First 迁移.NET Standard 2.1 解决方案

核心问题根因

EF6 仅在 .NET Framework 项目中提供 EDMX 设计器、ADO.NET 实体数据模型新建项等设计时支持,.NET Standard/.NET Core 项目原生不兼容 EF6 的EDMX 设计时能力,这是你遇到前两个问题的根本原因。第三个报错是因为 EDMX 对应的 ssdl/msl/csdl 三个元数据文件没有被正确嵌入程序集,EF 运行时无法加载元数据导致。

分步解决方法

1. 维护 EDMX 不变

  • 保留原有 .NET Framework 4.7 的 EF6 类库,所有 EDMX 编辑、模型更新操作都在该项目中完成,EDMX 文件的「生成操作」属性保持默认的 EntityDeploy,确保编译后三个元数据文件会被嵌入该程序集。

2. 迁移业务代码到 .NET Standard 2.1 项目

  • 无需复制 EDMX 文件到 .NET Standard 项目,仅需要拷贝 EDMX 自动生成的实体类、DbContext 子类、仓储相关业务代码即可。
  • 给 .NET Standard 项目安装 6.4 及以上版本的 EntityFramework NuGet包,仅该版本区间的EF6支持.NET Standard 2.1。

3. 修复元数据加载报错

你可以二选一以下两种方案处理元数据加载问题:

方案A:复用原有Framework程序集的嵌入元数据

  • .NET Standard 项目和最终的 .NET Core 3.1 Azure Function 项目都添加对原有 .NET Framework 4.7 类库的引用(.NET Core 3.1 兼容引用.NET Framework 4.7 类库)。
  • 修改 .NET Standard 项目中 DbContext 的构造函数,指定连接字符串的元数据路径指向Framework程序集的嵌入资源:
public 你的DbContext类名() : base(@"metadata=res://你的Framework程序集名称/你的EDMX文件名.csdl|res://你的Framework程序集名称/你的EDMX文件名.ssdl|res://你的Framework程序集名称/你的EDMX文件名.msl;provider=System.Data.SqlClient;provider connection string='你的实际数据库连接字符串'")
{
}

如果不需要限定程序集,也可以把程序集名称替换为*,让EF自动扫描所有加载的程序集查找元数据。

方案B:手动嵌入元数据到.NET Standard项目

  • 编译一次原有.NET Framework类库,在输出目录中找到生成好的.csdl/.ssdl/.msl三个文件。
  • 将三个文件复制到.NET Standard项目中,选中三个文件,在属性面板将「生成操作」设置为嵌入的资源。
  • 按照上述连接字符串格式,将元数据路径的程序集名称改为你的.NET Standard项目的程序集名称即可。

4. Azure Function 项目额外配置

  • 给 Azure Function 项目也安装相同版本的 EntityFramework NuGet包。
  • 确认Azure Function项目的配置文件中连接字符串的元数据部分和DbContext配置保持一致,没有错误。

效果验证

所有配置完成后,原有仓储逻辑不需要做任何业务修改,编译后运行Azure Function访问数据库,不会再抛出ssdl artifact must be supplied相关报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:03