【发布时间】:2016-05-19 14:27:52
【问题描述】:
很抱歉,如果有人问过这个问题,但我已经浏览了我能找到的所有其他帖子,似乎每个人都在使用 EDMX,而不是“生产”数据库。
我收到以下错误:
System.Data.Entity.Core.MetadataException:无法加载指定的元数据资源
尝试访问我的应用程序时。我的连接字符串如下:
<add name="FormAssemblyEntities" connectionString="metadata=res://*/Models.Entities.FormAssembly.csdl|res://*/Models.Entities.FormAssembly.ssdl|res://*/Models.Entities.FormAssembly.msl;provider=System.Data.SqlClient;provider connection string="data source=server\instance;initial catalog=dbname;user id=userid;password=password;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
如果我在本地运行它并且它使用以下连接字符串连接到 edmx,这将非常有效,但是一旦我将它放在我们的 UAT 服务器上并将其指向数据库,我就会收到该错误。
<add name="FormAssemblyEntities" connectionString="Data Source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\FormAssembly.mdf;Initial Catalog=FormAssembly;Integrated Security=SSPI;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
我真的不知道从哪里开始。数据库显示为最新,用户有权访问,服务器有权访问 SQL 服务器。
我也试过用 res://FormAssembly/ 和 res://FormAssembly.dll/ 替换 res://*/,但是前者导致同样的错误,而后者说 dll 不能找到(DLL 在 bin 目录中)。
任何帮助将不胜感激。
谢谢,
特拉维斯
【问题讨论】:
-
如果您查看您的第一个连接字符串,在引用 edmx 时,有一个地方指定了与数据库的连接。还是需要引用UAT服务器上的edmx,只需要改内部连接字符串到UAT数据库即可。
-
感谢您的回复,但我不确定您的意思。如果我在第一个连接字符串中查找 edmx,我什么也看不到。它在元数据中吗?
-
再看一下你的第一个连接字符串...这里是:
res://*/Models.Entities.FormAssembly.msl;provider=System.Data.SqlClient;***provider connection string=...***。里面是指向实际数据库的第二个连接字符串。这就是您需要在 UAT 环境中更改的内容。 -
是的,连接字符串属性已正确设置为我的 UAT 数据库,我为我的帖子修改了它。如果您指的是元数据下的 res:// 内容,那么它也存在于我们生产数据库的连接字符串中,并且可以正常工作。还是我误会了你?
-
如果你没有使用 edmx,那么去掉所有的元数据标签,然后使用
data source=server\instance;initial catalog=dbname;user id=userid;password=password;MultipleActiveResultSets=True;作为你的连接字符串?
标签: c# entity-framework metadata edmx