有同样的问题,因为我重命名了一个程序集。
我还必须在项目Properties / AssemblyInfo.cs中的AssemblyTitle和AssemblyProduct属性中重命名它,还删除并重新添加对edmx文件的引用。
然后它工作得很好。
我的问题和解决方案,症状是相同的“无法加载指定的元数据资源”,但根本原因是不同的。我在解决方案中有2个项目,一个是EntityModel,另一个是解决方案。我实际上删除并重新创建了EntityModel中的EDMX文件。
解决方案是我必须返回Web应用程序项目并将此行添加到配置文件中。新模型改变了一些必须在“其他”项目的Web.Config文件中复制的项目。旧的配置不再好。
<add name="MyEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl; provider=System.Data.SqlClient; provider connection string=" data source=Q\DEV15;initial catalog=whatever; user id=myuserid;password=mypassword; multipleactiveresultsets=True; application name=EntityFramework"" providerName="System.Data.EntityClient" />
经过数小时的谷歌搜索,并试图解决所有建议的解决方案。我在这里列出了几个解决方案。我也注意到了一个适合我的方法。 (我使用的是EF版本6.1.1和SQL Server 2014 - 但是使用的是较旧的数据库)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
...以及我尝试过的更多内容[例如:将EntityFramework版本还原到更高版本(不确定)]
的 什么对我有用: 强>
由此 文章在这里 ,它帮助我解决了我的问题。我改变了我的意见 ProviderManifestToken="2012" 至 ProviderManifestToken="2008" 在EDMX文件中。去做这个:
ProviderManifestToken="2012"
ProviderManifestToken="2008"
Solution Explorer
我希望有所帮助。
当Edmx在一个项目中并且您从另一个项目中使用它时,您可以获得此异常。
原因是 Res://*/ 是指向CURRENT程序集中的资源的uri。如果Edm在与使用它的代码不同的程序集中定义,则res:// * /将无法工作,因为无法找到该资源。
Res://*/
您需要提供程序集的全名(包括公钥标记),而不是指定 * 。例如:
res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...
构造连接字符串的更好方法是使用EntityConnectionStringBuilder:
public static string GetSqlCeConnectionString(string fileName) { var csBuilder = new EntityConnectionStringBuilder(); csBuilder.Provider = "System.Data.SqlServerCe.3.5"; csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName); csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", typeof(YourObjectContextType).Assembly.FullName); return csBuilder.ToString(); } public static string GetSqlConnectionString(string serverName, string databaseName) { SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder(); providerCs.DataSource = serverName; providerCs.InitialCatalog = databaseName; providerCs.IntegratedSecurity = true; var csBuilder = new EntityConnectionStringBuilder(); csBuilder.Provider = "System.Data.SqlClient"; csBuilder.ProviderConnectionString = providerCs.ToString(); csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", typeof(YourObjectContextType).Assembly.FullName); return csBuilder.ToString(); }
如果仍然遇到异常,请在反射器中打开程序集并检查.csdl,.ssdl和.msl文件的文件名。当资源具有与元数据值中指定的名称不同的名称时,它将不起作用。
有时我在项目中看到这个错误。我解决了这个问题
1 - 右键单击EDMX文件
2 - 选择 Run Custom Tool 选项
Run Custom Tool
我有同样的问题。我用反射器查看了我的编译后的dll,并看到资源的名称不正确。我改名了,现在看起来很好。
给你们 SelftrackingEntities 用户, 如果您已遵循Microsoft Walk-through并将Object上下文类分离为 wcf服务项目(通过链接到上下文.tt)所以这个答案适合你:
SelftrackingEntities
本文中显示的答案的一部分,包括以下代码:
... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", typeof(YourObjectContextType).Assembly.FullName);
不会为你工作!!原因是 YourObjectContextType.Assembly 现在驻留在不同的Assembley(在wcf项目组件内),
YourObjectContextType.Assembly
所以你应该更换 YourObjectContextType.Assembly.FullName 用 - &gt;
YourObjectContextType.Assembly.FullName
ClassTypeThatResidesInEdmProject.Assembly.FullName
玩得开心。
如果您使用来自其他项目的edmx,则在连接字符串中,更改...
metadata=res://*/Data.DataModel.csdl
...至...
metadata=res://*/DataModel.csdl
我的理论是,如果你有多个具有相同名称的edmx文件(例如Model1),它将给出该异常。 当我决定将所有edmx文件(坐在不同的项目中)命名为Model1时,我遇到了同样的问题,因为我认为它们应该是独立的。
这个小改动有助于解决这个问题。
我有3个项目的解决方案。
connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;
改成
connectionString="metadata=res://*/;
我有类似的错误。我重新创建了这个项目(长篇故事),并从旧项目中删除了所有内容。我之前没有意识到我的模型已经在名为“模型”的目录中,现在位于名为“模型”的目录中。一旦我在Web.Config中更改了连接:
<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl
对此:
<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl
一切顺利(改变了 Model 至 Models )。请注意,我必须在此字符串中更改这三个位置。
Model
Models
我能够在Visual Studio 2010,VB.net(ASP.NET)4.0中解决这个问题。
在实体模型向导期间,您将能够看到实体连接字符串。从那里,您可以复制并粘贴到您的连接字符串中。
我唯一缺少的是“App_Code”。在连接字符串中。
entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"
当我意外地将edmx文件的构建操作(在IDE中的属性下显示)从“EntityDeploy”切换为“无”时,这发生在我身上。 EntityDeploy是为您填充元数据的内容:请参阅 http://msdn.microsoft.com/en-us/library/cc982037.aspx
我也有这个问题,因为我的web.config中的连接字符串与我的EDMX所在的程序集的app.config中的连接字符串略有不同。不知道为什么会改变,但这里有两个不同的版本。
App.config中:
<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string="data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Web.config文件:
<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string="data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
修复它只是复制app.config字符串(注意最后的小差异 - 而不是“ App=EntityFramework “它想要的” application name=EntityFramework “)进入web.config并解决了问题。:)
App=EntityFramework
application name=EntityFramework
我编写了这个帮助器类来创建ObjectContext对象的实例,当它们在与使用它的项目不同的项目中定义时。我解析配置文件中的连接字符串,并用完整的程序集名称替换'*'。
它并不完美,因为它使用反射来构建对象,但它是我能找到的最通用的方法。
希望它可以帮助某人。
public static class EntityHelper<T> where T : ObjectContext { public static T CreateInstance() { // get the connection string from config file string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString; // parse the connection string var csBuilder = new EntityConnectionStringBuilder(connectionString); // replace * by the full name of the containing assembly csBuilder.Metadata = csBuilder.Metadata.Replace( "res://*/", string.Format("res://{0}/", typeof(T).Assembly.FullName)); // return the object return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T; } }
我花了一整天时间来解决这个错误
如果你正在使用 n-tear architecture
n-tear architecture
或者你试过 separate Models 由...生成 EDMX 从DataAccessLayer到 DomainModelLayer
separate Models
EDMX
DomainModelLayer
也许你会得到这个错误
webconfig (UILayer)
appconfig (DataAccessLayer)
其次是非常重要的 的 connection string 强>
connection string
connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....
这是问题所在
从我到达的地方 Model 或者我的连接字符串中的任何.csdl它们在哪里
在这里,我的解决方案看看图片
希望对你有所帮助
一个糟糕的app.config或web.config文件可以做到这一点..我已经在我的UI中将app.config连接字符串复制到我的web.config并最终输入:
<connectionStrings> <connectionStrings> <add name="name" connectionString="normalDetails"/> </connectionStrings> </connectionStrings>
我根本没有引用包含EDMX文件的类库。
我遇到了同样的错误信息。关闭并重新打开Visual Studio 2010解决了我的问题。
并且快速检查模型名称而不使用Reflector ....查找目录
... obj / {config output} / edmxResourcesToEmbed
并检查.csdl,.msl和.ssdl资源文件是否存在。如果它们位于子目录中,则必须将子目录的名称添加到模型名称之前。
例如,我的三个资源文件位于子目录中 的 数据 强> ,所以我的连接字符串必须是
元数据= RES:// * / 的 数据 强> .MyModel.csdl | RES:// * / 的 数据 强> .MyModel.ssdl | RES:// * / 的 数据 强> .MyModel.msl;
(与metadata = res://*/MyModel.csdl | res://*/MyModel.ssdl | res://*/MyModel.msl;)。
遇到同样的问题,我从数据库重新创建了edmx。 解决了我的问题。
当我们将解决方案文件夹中的项目移动到解决方案根目录时(由于项目位置克服了Mvc3AppConverter的可疑错误),我遇到了同样的问题。
尽管在所有*项目引用之后编译的解决方案是根据需要重新添加的,但是当网站被激活时会抛出错误。
EDMX位于其中一个被移动的项目中(“数据”项目),但当然缺少对Data项目的引用不会导致编译错误,只会导致运行时错误。
只需将缺少的引用添加到主项目即可解决此问题,无需编辑连接。
我希望这有助于其他人。
当我在构建新的.edmx设计器之前不清理解决方案时,这种情况发生在我身上。因此,在构建新的.edmx设计器之前,不要忘记清理解决方案。这有助于我跳过更多这个问题。提供导航详细信息,这是视觉工作室的新功能。
点击 - &gt;构建 - &gt;清洁解决方案 然后点击 - &gt;构建 - &gt;重建解决方案
点击 - &gt;构建 - &gt;清洁解决方案
然后点击 - &gt;构建 - &gt;重建解决方案
希望这可以帮助。感谢大家
这意味着应用程序无法加载EDMX。有几件事可以导致这种情况。
简而言之,你的问题中没有足够的细节来给出准确的答案,但希望这些想法能让你走上正轨。
的 更新: 强> 我写过 一篇博文,其中包含更完整的疑难解答步骤 。
我也有与Rick相同的问题和解决方案,除了我将现有的.edmx导入到一个新项目中,虽然基本命名空间无关紧要,但它被导入到一个不同的子目录中,所以我还必须更新连接Web.Config里面的三个字符串,包括不同的子目录命名:
我刚刚度过了30分钟。我重命名了实体对象,重命名了配置文件中的条目,但还有更多......你还要更改对csdl的引用
很容易错过 - 如果你重命名,请确保你得到 的 一切 强> ....
例外是因为编译器指向不存在的元数据而只是复制 app.config connectionstring to Web.config 的ConnectionString
app.config
Web.config