1

是的,我确实阅读并尝试 了实体框架无法加载指定的元数据资源

我通常首先使用代码并且没有任何问题。但是我需要对一个项目进行故障排除EDMX

语境:

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<WorkerPublicExtended> WorkerPublicExtendeds { get; set; }
}

连接字符串:

<add name="x500Entities"
connectionString="metadata=res://*/CDISWorkerPublicExtended.csdl|res://*/CDISWorkerPublicExtended.ssdl|res://*/CDISWorkerPublicExtended.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xserver;initial catalog=x500;persist security info=True;user id=xuser;password=xpassword;MultipleActiveResultSets=True;App=EntityFramework&quot;"
providerName="System.Data.EntityClient"/>

错误 :

EntityFramework.dll 中发生“System.Data.Entity.Core.MetadataException”类型的异常,但未在用户代码中处理其他信息:无法加载指定的元数据资源。

打到这条线后:

return context.WorkerPublicExtendeds.FirstOrDefault(x => x.upperIDSID == idsid.ToUpper().Trim());

完整方法:

 public WorkerPublicExtended GetEmployee(string idsid)
 {
     using (x500Entities context = new x500Entities())
     {
         return context.WorkerPublicExtendeds.FirstOrDefault(x => x.upperIDSID == idsid.ToUpper().Trim());
     }
 }
  1. 为什么会这样?
  2. 我连接到 sql server ssms 并且我没有看到WorkerPublicExtended我在图表 edmx 和模型中看到的表,我没有看到该名称被转换为真实表名的位置。这怎么样?
4

2 回答 2

0

可能的原因:1)在你的项目中找不到你的资源文件(这个资源文件在你的app.config中的连接字符串中配置)确认oyu有它。

2)当你说你连接到数据库并且你没有看到表时,那么你在错误的数据库中?这绝不应该发生,您为另一个数据库生成了 EDMX,或者有人删除了表并且没有重新生成 edmx?:X

如果您 200% 确定要连接的数据库是最新的架构、过程、视图等,或者是生产数据库,为什么不删除整个 edmx 并重新创建、测试和重新部署?

于 2016-06-03T23:38:43.000 回答
0

EMDX 的三个部分在连接字符串中看起来是正确的。仔细检查此部分是否正确后(请参阅本指南以解决您的问题):

  • 您可能已将模型的 MetadataArtifactProcessing 属性更改为 Copy to Output Directory,或者
  • 您更改了其他内容(例如程序集的名称),或者
  • 您可能正在使用后编译任务来嵌入不再工作的 EMDX。

来源从这里

还要检查整个字符串的语法是否正确。

于 2016-06-04T01:27:12.137 回答