如何通过构造函数传递EF DB First连接字符串,而不是放入app.config

时间:2014-09-26 18:00:14

标签: c# .net entity-framework

我正在开发一个DataBase First EF应用程序,一切都在使用自动生成的代码和app.config部分。但是当我尝试删除app.config的连接字符串并将其作为参数放在DbContext构造函数上时,我无法使其工作。

app.config中的连接字符串:

  <add name="EntityContext" 
       connectionString="metadata=res://*/ModelHistory.csdl|res://*/ModelHistory.ssdl|res://*/ModelHistory.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string=&quot;DATA SOURCE=XXXXX;PASSWORD=xxxxx;PERSIST SECURITY INFO=True;USER ID=XXXX&quot;" 
       providerName="System.Data.EntityClient" />

我试图通过构造函数传递它:

public EntityContext() : base(GetConnectionString()) { }

private string GetConnectionString()
{
    return metadata=res://*/ModelHistory.csdl|res://*/ModelHistory.ssdl|res://*/ModelHistory.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string=&quot;DATA SOURCE=XXXXX;PASSWORD=xxxxx;PERSIST SECURITY INFO=True;USER ID=XXXX&quot;" 
}

但它会引发错误:

  

附加信息:如果在Code First模式下使用,使用T4模板生成的数据库优先和模型优先开发的代码可能无法正常工作。要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串。要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码。

2 个答案:

答案 0 :(得分:4)

以下是EF团队为EF6提供的the answer,它对我有用。

答案 1 :(得分:0)

我们需要将连接字符串从app.config文件移动到代码中。这可以在context.cs文件中完成。 在构造函数中,您需要指定连接字符串 在您的连接字符串中,您需要替换替换引号“与'(单引号)

public partial class ProducerCentralEntities : DbContext
    {
        public ProducerCentralEntities()
      : base(@"metadata = res://*/TestProj.csdl|res://*/TestProj.ssdl|res://*/TestProj.msl;provider=System.Data.SqlClient;provider connection string=';data source=serverName;initial catalog=databaseName;integrated security=True;MultipleActiveResultSets=True;application name=EntityFramework';")
        {
        }
      }

注意: 1)您应该有完整的连接字符串 2)将引号替换为'with'