using connection string at runtime

c# entity-framework-6


I have created my model using database first approach. The issue is that my connection string changes at runtime. Therefore I have added an overloaded constructor for the DBContext class that takes connection string.

public partial class MyDataContext: DbContext
        public MyDataContext: ()
            : base("name=DbEntities")

        // added this overloaded contructor
        public MyDataContext: (string connectionString)
            : base(connectionString)

The connection string that I get at runtime is like below.

Integrated Security=SSPI;Data Source=localhost\sqlexpress;initial catalog=MyDatabase;Max Pool Size=100;Min Pool Size=20;Connect Timeout=15;

Howover when I run a query using MyDataContext that is created using overloaded constructor, I get following error.

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development. This will not work correctly. To fix this problem do not remove the line of code that throws this exception. If you wish to use Database First or Model First, then make sure that the Entity Framework connection string is included in the app.config or web.config of the start-up project. If you are creating your own DbConnection, then make sure that it is an EntityConnection and not some other type of DbConnection, and that you pass it to one of the base DbContext constructors that take a DbConnection. To learn more about Code First, Database First, and Model First see the Entity Framework documentation here:

Any idea how this could be accomplished?

12/19/2014 6:58:47 PM

Accepted Answer

You need to create an EntityConnectionString and pass that one to your DbContext. You are currently only using an SqlConnectionString. I suggest you take a look at EntityConnectionStringBuilder.

This is an example which you could use for an Sql Database First approach;

SqlConnectionStringBuilder sqlStringBuilder = new SqlConnectionStringBuilder();
sqlStringBuilder.Database = "database name":
sqlStringBuilder.Password = "password";
sqlStringBuilder.UserID = "userid";
// other properties

EntityConnectionStringBuilder entityStringBuilder = new EntityConnectionStringBuilder();
entityStringBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
entityStringBuilder.Provider = "System.Data.MySqlClient";
entityStringBuilder.Metadata = "resx//*/YourDbContext.csdl|resx//*/YourDbContext.ssdl|resx//*/YourDbContext.msl";

MyDbContext dbContext = new MyDbContext(entityStringBuilder.ConnectionString);
12/19/2014 8:19:02 PM

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow