我使用 VS 2010、WCF 4.0 和 EF 4.1.1 开发了 Web 应用程序。我的 WCF 服务使用 web.config 文件中配置的多个 EF 连接字符串开发,这些字符串取自实体模型 app.config 文件。基于参数,我在运行时使用 EF 连接字符串重定向数据库。
我的 WCF4.0 web.config 像:
<connectionStrings>
<add name="WMSChennaiDEVEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=192.168.0.89;Initial Catalog=WMSCMSWPROD;User ID=sa;Password=wms@123;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
<add name="WMSHyderabadDEVEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=192.168.0.89;Initial Catalog=WMSHMSWPROD;User ID=sa;Password=wms@123;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
在我的 WCF Service.svc.cs 文件中,我编写了具有 CenterId 参数的函数,并且基于该 ID,我正在更改我的 EF 连接字符串,如下所示
WMSChennaiDEVEntities EcChennai;
public void SetEntityModel(int CenterId)
{
if (CenterId == 4)
EcChennai = new WMSChennaiDEVEntities(ConfigurationManager.ConnectionStrings["WMSChennaiDEVEntities"].ToString());
else if (CenterId == 10)
EcChennai = new WMSChennaiDEVEntities(ConfigurationManager.ConnectionStrings["WMSHyderabadDEVEntities"].ToString());
}
现在我要将此 Web 应用程序转换为 VS 2012。我创建了具有相同实体的新 EF 模型并创建了新的 WCF 服务。我做了一些更改,当我只使用一个 EF 连接字符串时,一切正常。
WMSMainEntities EntCenter = new WMSMainEntities();
public List<WMSCenter> GetCenters()
{
using (var tt = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
{
EntCenter.Configuration.LazyLoadingEnabled = false;
EntCenter.Configuration.ProxyCreationEnabled = false;
var CenterColl = EntCenter.WMSCenters.ToList();
tt.Complete();
tt.Dispose();
return CenterColl;
}
}
现在,当我要在函数运行时更改 EF 连接字符串时,我遇到了大麻烦。实体未占用连接字符串参数,因为显示消息“不包含采用 1 个参数的构造函数”
WMSChennaiDEVEntities EcChennai;
public void SetEntityModel(int CenterId)
{
if (CenterId == 4)
EcChennai = new WMSChennaiDEVEntities(ConfigurationManager.ConnectionStrings["WMSChennaiDEVEntities"].ToString());
else if (CenterId == 10)
EcChennai = new WMSChennaiDEVEntities(ConfigurationManager.ConnectionStrings["WMSHyderabadDEVEntities"].ToString());
}
错误信息如:
Error 3 'CTScan.EntityLibrary.WMSChennaiDEVEntities' does not contain a constructor that takes 1 arguments D:\Code\CTScan\CTScan.WCFService\CTScanService.svc.cs 66 29 CTScan.WCFService
我已经在服务中开发了 300 多种方法。每个函数都依赖于 SetEntityModel(int CenterId) 函数。
所以请帮我解决如何在运行时调用 EF5 连接字符串的问题。
提前致谢。
编辑:
我试过直接给出连接字符串如下:
if (CenterId == 4)
{
EcChennai = new WMSHMSWPRODEntities();
string ConStr = "metadata=res://*/CTScanCore.csdl|res://*/CTScanCore.ssdl|res://*/CTScanCore.msl;provider=System.Data.SqlClient;provider connection string='data source=192.168.0.89;initial catalog=WMSHMSWPROD;persist security info=True;user id=sa;password=wms@123;App=EntityFramework'";
EcChennai.Database.Connection.ConnectionString = ConStr;
}
更改: 1. 删除了连接字符串“MultipleActiveResultSets=True;”中的参数 2. 删除"
并添加了单引号 3. 错误消息 Keyword not supported: 'metadata'。在 EcChennai.Database.Connection.ConnectionString = ConStr;
Keyword not supported: 'metadata'.
请帮我