我确实阅读并尝试了实体框架 无法加载指定的元数据资源
我通常首先使用代码,并且没有问题。但是我需要对项目进行故障排除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="data source=xserver;initial catalog=x500;persist security info=True;user id=xuser;password=xpassword;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient"/>
错误:
EntityFramework 中发生类型为"System.Data.Entity.Core.MetadataException"的异常.dll但未在用户代码中处理 其他信息:无法加载指定的元数据资源。
点击此行后:
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());
}
}
- 为什么会这样?
- 我连接到sql服务器ssms,但我没有看到我在图表edmx和模型中看到的表
WorkerPublicExtended
,我没有看到该名称在哪里转换为真正的表名。这是怎么回事?
可能的原因:1) 您的资源文件在您的项目中无处可寻(此资源文件在连接字符串中的 app.config 中配置)确认 OYU 拥有它。
2)当您说连接到数据库并且看不到表时,那么您在错误的数据库中?这不应该发生,您为另一个数据库生成了 EDMX,或者有人删除了表并且没有重新生成 EDMX?:X
如果您 200% 确定要连接的数据库是最新的架构、过程、视图等,或者它是生产数据库,为什么不删除整个 edmx 并重新创建、测试和重新部署呢?
EMDX 的三个部分在连接字符串中看起来是正确的。 仔细检查此部件是否正确后(请参阅本指南以解决您的问题):
- 您可能已将模型的"元数据项目处理"属性更改为"复制到输出目录",或者
- 您更改了其他内容(如程序集的名称),或
- 您可能正在使用编译后任务来嵌入不再工作的 EMDX。
来源于这里。
还要检查整个字符串的语法是否正确。