Reputation: 1596
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
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
Reputation: 21
I had the same error. My new connection string was missing "Initial Catalog="
Upvotes: 0
Reputation: 124
Had same issue today. Connection string is stored in cached App.Config file in obj folder.
Solution: Delete obj folder.
Upvotes: 0
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