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

ASP.NET MVC Database First报错:无法加载指定元数据资源

ASP.NET MVC Database First模式下MetadataException错误原因及解决方法

问题描述

首次采用ASP.NET MVC Database First模式开发项目,已连接现有数据库,但在控制器中检索数据时出现错误:

System.Data.Entity.Core.MetadataException: Unable to load the specified metadata resource

相关代码与配置

自动生成的连接字符串

<connectionStrings>
  <add name="Entitiesdb" connectionString="metadata=res://*/Models.zSql.csdl|res://*/Models.zSql.ssdl|res://*/Models.zSql.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DESKTOP-N4UN8GE;initial catalog=MondoErp-UAT;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

数据模型上下文代码

public partial class zSql: DbContext 
{
  public zSql(): base("name=Entitiesdb") {}

  protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    throw new UnintentionalCodeFirstException();
  }
  public virtual DbSet < Nationality > Nationality {
    get;
    set;
  }
}

控制器代码

private zSql db = new zSql();

public ActionResult Index()
{
    IEnumerable<NationalityModel> nationalities = db.Nationality.Select(x=> new NationalityModel
    {
        IDNationality= x.IDNationality,
        Name = x.Name,
        Description = x.Description
    }).ToList();

    return View(nationalities);
}

错误原因分析

这个错误的核心是Entity Framework无法找到加载数据模型所需的元数据文件(.csdl、.ssdl、.msl),常见原因包括:

  • 元数据路径与实际命名空间/文件路径不匹配:连接字符串中res://*/Models.zSql.csdl指定的命名空间(Models)可能与.edmx模型实际生成的命名空间不一致,或者项目结构变更后路径未同步更新。
  • 元数据文件的嵌入资源属性未正确设置:.edmx生成的.csdl、.ssdl、.msl文件如果未设置为「嵌入的资源」,EF无法从程序集中读取这些文件。
  • 连接字符串中元数据文件名拼写错误:比如文件名大小写、后缀名或前缀与实际文件不符,导致EF无法定位资源。
  • 模型文件损坏或生成不完整:Database First模式下生成.edmx模型时出现异常,导致元数据文件缺失或内容错误。

解决方法

  1. 验证命名空间匹配
    打开.edmx文件,查看模型的命名空间(右键.edmx文件→属性,查看「自定义工具命名空间」),确保连接字符串中Models.zSql部分与实际命名空间一致。例如如果模型命名空间是MondoErp.Models,则连接字符串应改为:

    metadata=res://*/MondoErp.Models.zSql.csdl|res://*/MondoErp.Models.zSql.ssdl|res://*/MondoErp.Models.zSql.msl;...
    

    或者简化为res://*/让EF自动查找所有嵌入的元数据资源:

    metadata=res://*/;...
    
  2. 检查嵌入资源属性
    在解决方案资源管理器中展开.edmx文件的子节点,找到对应的.csdl、.ssdl、.msl文件,右键→属性,将「生成操作」设置为嵌入的资源。

  3. 修正连接字符串的元数据路径
    确认连接字符串中的文件名(zSql.csdl等)与实际.edmx生成的元数据文件名完全一致,包括大小写和拼写。

  4. 重新生成数据模型
    如果以上操作无效,右键.edmx文件→「从数据库更新模型」,或直接删除现有.edmx模型后重新从数据库生成,让Visual Studio自动同步元数据文件和连接字符串配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:25:52