evolon
evolon

Reputation: 1596

c# - Entity Framework ConnectionString won't update after changing App.Config in runtime

I'm developing a WPF application which depends on Entity Framework for data access. At the first time installation I need to create a new connection string based on the User input, then updating App.Config according to that.

The problem is: after updating the App.Config file, Entity Framework doesn't detect the change and uses the old startup-time ConnectionString for instantiating the DbContext.

How can I update the Entity Framework's ConnectionString setting at runtime?

Upvotes: 9

Views: 4296

Answers (4)

Nay Thit Htoo
Nay Thit Htoo

Reputation: 11

Global.cs

public class Global
   {
    public static string ConnectionString=String.Empty;
   }

Store connection string as temporary in Global.cs first time after connection string saved in App.config.

DBContext.cs

 public class DBContext: DbContext
    {
        public DbSet<User> UserInfo { get; set; }   
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                String.IsNullOrEmpty(Global.ConnectionString) ? ConfigurationManager.ConnectionStrings["your_connectionstring"].ConnectionString
                : Global.ConnectionString
                );
        }

    } 

Firstly, you have already defined connection string in your App.config. Hope you enjoy!

Upvotes: 0

Judy M
Judy M

Reputation: 21

I had the same error. My new connection string was missing "Initial Catalog="

Upvotes: 0

Marko Krizmanic
Marko Krizmanic

Reputation: 124

Had same issue today. Connection string is stored in cached App.Config file in obj folder.

Solution: Delete obj folder.

Upvotes: 0

Adriano Repetti
Adriano Repetti

Reputation: 67148

Entity Framework caches connection string, there isn't a method to force a refresh.

From this article: connection string given in DbContext constructor isn't cached then you can use this as workaround:

public class MyContext : DbContext {
    public MyContext()
        : base(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString)
    {
    }
}

Upvotes: 8

Related Questions