Question

I have entity framework 5 with the mysql connector installed (mysql for vs 1.1.3 and mysql connector 6.8.3) and have a connection string in my app.config:

<add name="applicantDBEntities" connectionString="metadata=res://*/Models.applicantsDBModel.csdl|res://*/Models.applicantsDBModel.ssdl|res://*/Models.applicantsDBModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;database=applicantsdb&quot;" providerName="System.Data.EntityClient" />

If I use the connection string in the app.config, everything works, but I want the user to be able to choose his server, username, password and DB. How i tried to implement it:

public partial class applicantDBEntities : DbContext
    {
        public applicantDBEntities()
            : base("name=applicantDBEntities")
        {
        }

        public applicantDBEntities(string connectionString) : base (connectionString)
        {

        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<applicant> applicants { get; set; }
        public DbSet<file> files { get; set; }
    }

And the initialization itself:

CONNECTION_PATTERN = "server={0};database={1};User Id={2};password={3}";
this.dbContext = new applicantDBEntities(String.Format(CONNECTION_PATTERN, 
                Settings.GetInstance().Server, Settings.GetInstance().Database, 
                Settings.GetInstance().User, Settings.GetInstance().Password));

but no matter what I pass as arguments (even wrong ones) I always end up in the OnModelCreating method.

What is the correct way to do this?

EDIT: As @Andrew mentioned, my connection string was wrong. This is how I do it now:

string connectionString = new System.Data.EntityClient.EntityConnectionStringBuilder
            {
                Metadata = "res://*",
                Provider = "MySql.Data.MySqlClient",
                ProviderConnectionString = new System.Data.SqlClient.SqlConnectionStringBuilder
                {
                    InitialCatalog = Settings.GetInstance().Database,
                    DataSource = Settings.GetInstance().Server,
                    IntegratedSecurity = false,
                    UserID = Settings.GetInstance().User,
                    Password = Settings.GetInstance().Password
                }.ConnectionString
            }.ConnectionString;
this.dbContext = new applicantDBEntities(connectionString);
Was it helpful?

Solution

Your connection string is in invalid format. It should resemble this:

"metadata=res://*/Northwind.csdl|  
          res://*/Northwind.ssdl|  
          res://*/Northwind.msl;  
 provider=System.Data.SqlClient;  
 provider connection string=  
          &quot;Data Source=.\sqlexpress;  
          Initial Catalog=Northwind;  
          Integrated Security=True;  
          MultipleActiveResultSets=True&quot;"

and might be based on EntityConnectionStringBuilder

http://msdn.microsoft.com/en-us/data/jj592674.aspx here's description of how you should connect to database for different scenarios and framework versions

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top