【问题标题】:How to pass a EF DB First connection string via constructor instead put in app.config如何通过构造函数传递 EF DB First 连接字符串,而不是放入 app.config
【发布时间】:2014-09-26 18:00:14
【问题描述】:

我正在开发一个 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 开发的代码可能无法正常工作。要继续使用 Database First 或 Model First,请确保在执行应用程序的配置文件中指定了实体框架连接字符串。要使用从 Database First 或 Model First 生成的这些类,使用 Code First 添加使用属性或 DbModelBuilder API 的任何其他配置,然后删除引发此异常的代码。

【问题讨论】:

  • 如果您使用的是数据库优先,那么更改连接字符串的唯一真正选择是使用 app.config 文件。不要创建自己的连接上下文类,它是为你制作的。
  • 那么为什么要从配置文件中取出连接字符串呢?
  • @gunr2171 但是如果要求不是通过app.config显示连接字符串并将其设置为硬编码,我没有任何选择?
  • 您的应用程序是否希望在运行时经常更改连接字符串?
  • @gunr2171 出于安全原因,实际上它在注册表中已加密

标签: c# .net entity-framework


【解决方案1】:

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

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) 将引号 " 替换为 '

【讨论】:

  • 而不是使用 "在传递的连接字符串中。它应该是一个 ' .
猜你喜欢
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多