1

我使用 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=&quot;Data Source=192.168.0.89;Initial Catalog=WMSCMSWPROD;User ID=sa;Password=wms@123;MultipleActiveResultSets=True&quot;" 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=&quot;Data Source=192.168.0.89;Initial Catalog=WMSHMSWPROD;User ID=sa;Password=wms@123;MultipleActiveResultSets=True&quot;" 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. 删除&quot;并添加了单引号 3. 错误消息 Keyword not supported: 'metadata'。在 EcChennai.Database.Connection.ConnectionString = ConStr;

Keyword not supported: 'metadata'.

请帮我

4

1 回答 1

1

在自动生成的实体类之外的部分类中添加您要查找的构造函数:

public partial class WMSChennaiDEVEntities : DbContext
{
    public WMSChennaiDEVEntities(string connectionstring)
            : base(connectionstring)
    {
    }
}

此构造函数显然不包含在 EF 5 中,以防止我们在需要实体连接字符串时意外传递 sql 连接字符串。 不要错误地使用 Code First

于 2013-10-24T15:44:38.230 回答