C# 如何通过构造函数传递EF DB第一个连接字符串,而不是放在app.config中

C# 如何通过构造函数传递EF DB第一个连接字符串,而不是放在app.config中,c#,.net,entity-framework,C#,.net,Entity Framework,我正在开发一个数据库首个EF应用程序,自动生成的代码和app.config部分一切都很好。但是,当我试图删除app.config的连接字符串并将其作为DbContext构造函数的参数时,我无法让它工作 app.config中的连接字符串: <add name="EntityContext" connectionString="metadata=res://*/ModelHistory.csdl|res://*/ModelHistory.ssdl|res://*/Mode

我正在开发一个数据库首个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" />
但它抛出了一个错误:

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


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

public分部类producerentralenties:DbContext
{
公共产品中心()
:base(@“metadata=res://*/TestProj.csdl | res://*/TestProj.ssdl | res://*/TestProj.msl;provider=System.Data.SqlClient;provider连接字符串=';数据源=serverName;初始目录=databaseName;集成安全性=True;MultipleActiveResultSets=True;应用程序名称=EntityFramework';))
{
}
}
注: 1) 您应该有完整的连接字符串
2) 将quote“替换为“

如果您首先使用数据库,那么更改连接字符串的唯一真正选择就是使用app.config文件。不要创建自己的连接上下文类,它是为您创建的。那么,为什么要从配置文件中取出连接字符串作为开始?@gunr217但如果要求不是通过app.config显示连接字符串并将其设置为硬代码,我没有任何选择?您的应用程序在运行时是否希望经常更改连接字符串?@gunr217出于安全原因,实际上它在注册表中已加密,而在传递的连接字符串中不使用“它应该是一个”。
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;" 
}