如何使用控制台应用程序中 Main 函数的参数设置 app.config 中的连接字符串的值

How to set value of connection string in app.config using an argument from Main function in console app

我有一个使用 entity framework 的 C# 控制台应用程序。在应用程序配置文件中,我定义了连接字符串

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

我的context.cs

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

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

我的Program.cs

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

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

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

示例:

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

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

context = new SinergyContext();

更改您的 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());

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

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();
}