J. *_*een 661 .net c# ado.net entity-framework
突然间,我一直MetadataException在实例化我生成的ObjectContext类.App.Config中的连接字符串看起来是正确的 - 自上次工作以来没有改变 - 我尝试从底层数据库重新生成一个新模型(edmx文件)而没有任何变化.
有人有主意吗?
更多细节:我没有更改任何属性,我没有更改任何输出程序集的名称,我没有尝试在程序集中嵌入EDMX.我离开工作只等了10个小时,直到我回来.然后它不再工作了.
我试过重新创建EDMX.我试过重新创建这个项目.我甚至尝试从头开始重新创建数据库.没有运气,无论如何.
Cra*_*ntz 835
这意味着应用程序无法加载EDMX.有几件事可以导致这种情况.
简而言之,你的问题中没有足够的细节来给出准确的答案,但希望这些想法能让你走上正轨.
更新:我写了一篇博文,其中包含更完整的故障排除步骤.
Mic*_*ech 353
这个小改动有助于解决这个问题.
我有3个项目的解决方案.
connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;
Run Code Online (Sandbox Code Playgroud)
改成
connectionString="metadata=res://*/;
Run Code Online (Sandbox Code Playgroud)
小智 115
当Edmx在一个项目中并且您从另一个项目中使用它时,您可以获得此异常.
原因是Res://*/uri指向CURRENT程序集中的资源.如果Edm在与使用它的代码不同的程序集中定义,则res://*/将无法工作,因为无法找到该资源.
而不是指定'*',而是需要提供程序集的全名(包括公钥标记).例如:
res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...
Run Code Online (Sandbox Code Playgroud)
构造连接字符串的更好方法是使用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();
}
Run Code Online (Sandbox Code Playgroud)
如果仍然遇到异常,请在反射器中打开程序集并检查.csdl,.ssdl和.msl文件的文件名.当资源具有与元数据值中指定的名称不同的名称时,它将不起作用.
Ric*_*hur 63
我有类似的错误.我重新创建了这个项目(长篇故事),并从旧项目中删除了所有内容.我之前没有意识到我的模型已经在名为"模型"的目录中,现在位于名为"模型"的目录中.一旦我在Web.Config中更改了连接:
<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl
Run Code Online (Sandbox Code Playgroud)
对此:
<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl
Run Code Online (Sandbox Code Playgroud)
一切工作(改变Model到Models).请注意,我必须在此字符串中更改这三个位置.
leq*_*qid 25
并且快速检查模型名称而不使用Reflector ....查找目录
... obj/{config output}/edmxResourcesToEmbed
并检查.csdl,.msl和.ssdl资源文件是否存在.如果它们位于子目录中,则必须将子目录的名称添加到模型名称之前.
例如,我的三个资源文件位于子目录Data中,因此我的连接字符串必须是
metadata = res://*/Data .MyModel.csdl | res://*/Data .MyModel.ssdl | res://*/Data .MyModel.msl;
(与metadata = res://*/MyModel.csdl | res://*/MyModel.ssdl | res://*/MyModel.msl;).
Ghl*_*ouw 15
我也有这个问题,因为我的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" />
Run Code Online (Sandbox Code Playgroud)
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" />
Run Code Online (Sandbox Code Playgroud)
修复它只是复制app.config字符串(注意最后的小差异 - 而不是" App=EntityFramework"它想要" application name=EntityFramework")进入web.config并解决了问题.:)
hgc*_*ngs 12
当我意外地将edmx文件的构建操作(在IDE中的属性下显示)从"EntityDeploy"切换为"无"时,这发生在我身上.EntityDeploy是为您填充元数据的内容:请参阅http://msdn.microsoft.com/en-us/library/cc982037.aspx
如果您使用的是来自不同项目的 edmx,则在连接字符串中,更改...
metadata=res://*/Data.DataModel.csdl
Run Code Online (Sandbox Code Playgroud)
...到...
metadata=res://*/DataModel.csdl
Run Code Online (Sandbox Code Playgroud)
当我在构建新的.edmx设计器之前不清理解决方案时,这会发生在我身上。因此,在构建新的.edmx设计器之前,请不要忘记清理解决方案。这有助于我跳过与此有关的更多问题。如果您是Visual Studio的新手,请提供以下导航详细信息。
单击->构建->清洁解决方案
然后单击->构建->重建解决方案
希望这可以帮助。感谢大家
小智 6
对于我的情况,它通过更改edmx文件的属性来解决.
这解决了我的问题.问题是,当容器试图找到元数据时,它无法找到它.所以只需在同一个组件中进行.如果您将edmx文件放在另一个程序集中,则此解决方案将无法运行
我花了一整天时间来解决这个错误
如果你正在使用 n-tear architecture
或者您尝试separate Models通过EDMX表单DataAccessLayer 生成DomainModelLayer
也许你会得到这个错误
webconfig (UILayer)和appconfig (DataAccessLayer)中是相同的其次是非常重要的 connection string
connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....
Run Code Online (Sandbox Code Playgroud)
这是问题所在
从我Model到底在哪里或者我的连接字符串中的任何.csdl它们在哪里
在这里,我的解决方案看看图片
希望对你有所帮助
有时我在我的项目中看到这个错误。我解决了
1 - 右键单击 EDMX 文件
2 - 选择Run Custom Tool选项
3 - 重建项目
我能够在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"
Run Code Online (Sandbox Code Playgroud)
经过数小时的谷歌搜索和尝试解决,建议的解决方案均无用。我在这里列出了几种解决方案。我也注意到了对我有用的那个。(我使用的是EF版本6.1.1和SQL Server 2014-但使用的是较旧的数据库)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;这些是文件。要查看它们,您可以在解决方案资源管理器中的〜/ obj / ..目录下切换“显示所有文件”)...以及我尝试过的许多其他操作[例如:将EntityFramework版本还原为更高版本(不确定)
对我有用的是:
从这里的这篇文章,它帮助我解决了我的问题。我只是改变了我ProviderManifestToken="2012"对ProviderManifestToken="2008"在EDMX文件。去做这个:
解决方案资源管理器
希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
448651 次 |
| 最近记录: |