【发布时间】:2015-05-15 02:20:42
【问题描述】:
首先,这与 SO 上的另一个问题有关:
我已经阅读并调试了以下 SO 文章和博客的问题:
MetadataException: Unable to load the specified metadata resource
和
http://blogs.teamb.com/craigstuntz/2010/08/13/38628/
但是...除了这个“修复”之外,我还有其他问题
我有一个 WebAPI (2.1),我的 WebAPI 中的连接字符串是这样的:
<connectionStrings>
<add name="ProjectEntities" connectionString="
metadata=res://*/ProjectModel.csdl|
res://*/ProjectModel.ssdl|
res://*/ProjectModel.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=192.168.0.1;
initial catalog=Project;
persist security info=True;
user id=***;
password=***;
multipleactiveresultsets=True;
App=EntityFramework""
providerName="System.Data.EntityClient" />
当我在我的 WebAPI(伪代码)中对 DbSet 调用 ToList() 时:
DbContext _DbContext = new ProjectEntities();
DbSet<TEntity> _dbSet = _DbContext.Set<TEntity>();
_dbSet.ToList();
效果很好!
当我从 WINDOWS SERVICE 中调用相同的内容时,我收到以下错误:
连接字符串的 app.config 条目与 web.config 完全相同:
<connectionStrings>
<add name="ProjectEntities" connectionString="
metadata=res://*/ProjectModel.csdl|
res://*/ProjectModel.ssdl|
res://*/ProjectModel.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=192.168.0.1;
initial catalog=Project;
persist security info=True;
user id=***;
password=***;
multipleactiveresultsets=True;
App=EntityFramework""
providerName="System.Data.EntityClient" />
现在,博客显示手动引用 dll:
<connectionStrings>
<add name="ProjectEntities" connectionString="
metadata=res://Project.Data.dll/ProjectModel.csdl|
res://Project.Data.dll/ProjectModel.ssdl|
res://Project.Data.dll/ProjectModel.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=192.168.0.1;
initial catalog=Project;
persist security info=True;
user id=***;
password=***;
multipleactiveresultsets=True;
App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
这不起作用/解决问题
我能够修复它的唯一方法是使用完全限定名称:
<connectionStrings>
<add name="ProjectEntities" connectionString="
metadata=res://Project.Data, Version=1.6.0.0, Culture=neutral, PublicKeyToken=null/ProjectModel.csdl|
res://Project.Data, Version=1.6.0.0, Culture=neutral, PublicKeyToken=null/ProjectModel.ssdl|
res://Project.Data, Version=1.6.0.0, Culture=neutral, PublicKeyToken=null/ProjectModel.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=192.168.250.125\sqlexpress;
initial catalog=Project;
persist security info=True;
user id=***;
password=***;
multipleactiveresultsets=True;
App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
为什么会这样?为什么这可以在 Web 项目中工作,而不是 Windows 服务项目?我最近从 EF5 更改为 EF6,并且弹出了此错误 - 所有这些代码在升级 EF 之前都有效。有没有人知道为什么以及如何/如果我可以在我的连接字符串中使用 * 作为 dll 名称?
我认为这是服务 .exe 运行位置的问题,并且没有在本地复制文件,但是不,Project.Data.dll 是在那里,这是正确的版本。
我使用 FusionLog 尝试查找错误,但没有运气。我很困惑。
【问题讨论】:
-
您的 Windows 服务是否在不同的凭据下运行?他们是否具有连接到 sql server 的适当权限?
-
尝试将连接字符串烘焙到代码中,看看是文件问题还是连接本身问题。
标签: c# entity-framework configuration windows-services entity-framework-6