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="data source=DESKTOP-N4UN8GE;initial catalog=MondoErp-UAT;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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模型时出现异常,导致元数据文件缺失或内容错误。
解决方法
验证命名空间匹配
打开.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://*/;...检查嵌入资源属性
在解决方案资源管理器中展开.edmx文件的子节点,找到对应的.csdl、.ssdl、.msl文件,右键→属性,将「生成操作」设置为嵌入的资源。修正连接字符串的元数据路径
确认连接字符串中的文件名(zSql.csdl等)与实际.edmx生成的元数据文件名完全一致,包括大小写和拼写。重新生成数据模型
如果以上操作无效,右键.edmx文件→「从数据库更新模型」,或直接删除现有.edmx模型后重新从数据库生成,让Visual Studio自动同步元数据文件和连接字符串配置。
内容的提问来源于stack exchange,提问作者Dev Beginner
相关产品推荐
相关产品推荐

