【问题标题】:How to set value of connection string in app.config using an argument from Main function in console app如何使用控制台应用程序中 Main 函数的参数在 app.config 中设置连接字符串的值
【发布时间】:2021-05-25 16:37:18
【问题描述】:

我有一个使用实体框架的 c# 控制台应用程序。在应用程序配置文件中,我定义了连接字符串

<connectionStrings>
<add name="DefaultConnection" connectionString="Provider=Microsoft.ACE.OleDb.12.0;Data source={argument from Main function}" providerName="JetEntityFrameworkProvider" />
</connectionStrings>

我的上下文.cs

public class SinergyContext : DbContext
{
    public SinergyContext() : base("name=DefaultConnection") { }

    public DbSet<RejectedData> RejectedErrors { get; set; }
}

我的程序.cs

static void Main(string[] args)
    {
        // arg[0] contains the connection string data source

是否可以在 Program.cs 文件中设置连接字符串?

【问题讨论】:

标签: c# entity-framework console-application connection-string app-config


【解决方案1】:

更改您的 DBContext 以接受自定义连接字符串:

public class SinergyContext : DbContext
{
    public SinergyContext(string cs) : base(cs) { }

    public DbSet<RejectedData> RejectedErrors { get; set; }
}

然后通过以下方式实例化它:

var db = new SinergyContext("my connection string");

如果你必须使用提供者,你可以使用EntityConnectionStringBuilder:

var builder = new EntityConnectionStringBuilder
{
    Provider = "JetEntityFrameworkProvider",
    ProviderConnectionString = $"Provider=Microsoft.ACE.OleDb.12.0;Data source={args[0]}"
};
var db = new SinergyContext(builder.ToString());

【讨论】:

  • 是否可以在 SinergyContext 的实例化中添加提供者(例如 JetEntityFrameworkProvider)?因为没有此提供程序,与 Access 数据库的连接将无法正常工作。这就是 app.config 有用的原因,因为它包含提供程序
  • 这是 EF Core 吗?还是 EF 6?
  • 感谢@mxmissile 的帮助。我确实找到了解决问题的方法。我公布了答案。
【解决方案2】:

您可以使用ConfigurationManager.ConnectionStrings 获取应用配置的ConnectionString

例子:

system.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

或创建上下文并获取其属性

context = new SinergyContext();

【讨论】:

    【解决方案3】:

    最后我找到了一种使用 c#(在 main.cs 文件中)将值传递给 app.config 的方法。 方法如下:

    static void Main(string[] args)
    {
      Configuration config = ConfigurationManager
        .OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location);
    
      ConnectionStringsSection section = 
        (ConnectionStringsSection)config.GetSection("connectionStrings");
    
      section.ConnectionStrings["DefaultConnection"].ConnectionString += args[0];
    
      config.Save();
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      相关资源
      最近更新 更多