How do I programmatically set the connection string for Entity-Framework Code-First?

前端 未结 4 557
长发绾君心
长发绾君心 2020-11-27 16:27

I\'m trying to write some code that allows me to switch between SQLCE (locally on my dev machine) and full SQL (on AppHarbor). With SQL CE, the connection string is all hand

相关标签:
4条回答
  • 2020-11-27 16:57

    You can also set it directly on your context. You have to attach the mdf to the SqlServer instance you want to use first. Not exactly elegant but it worked for me

    public void DoImportWork()
    {
       var ctx = new StatisticsContext(); << your DbContext 
    
       ctx.Database.Connection.ConnectionString = @"Data Source=localhost\SQLEXP;AttachDbFilename=""C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXP\MSSQL\DATA\StatisticsData.mdf"";Integrated Security=True";
    
       ctx.Database.Connection.Open();
    }
    

    as usual EF will auto-generate everything when you add your first row to the context.

    0 讨论(0)
  • 2020-11-27 17:11

    This code will come handy for creating connection string with Entity Framework

        public string GenerateEFConnectionString(string serverName, string dbName,string ModelName,string userName,string password)
        {   
            // Initialize the connection string builder for the underlying provider.
            SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
            sqlBuilder.DataSource = serverName;
            sqlBuilder.InitialCatalog = dbName;
            //sqlBuilder.IntegratedSecurity = false;
            sqlBuilder.UserID = userName;
            sqlBuilder.Password = password;
            sqlBuilder.MultipleActiveResultSets = true;
    
            // Initialize the EntityConnectionStringBuilder.
            EntityConnectionStringBuilder entityBuilder =
                new EntityConnectionStringBuilder();
    
            entityBuilder.Provider = "System.Data.SqlClient";
            entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
    
            // Set the Metadata location.
            entityBuilder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl",ModelName); 
            return (entityBuilder.ToString().Replace("\"","&quot;"));
        }
    

    It can be called from a set of parameters as

        GenerateEFConnectionString("srv","db","mod","vinodsrivastav","nopassword");
    

    to generate a connection string like this

    metadata=res://*/mod.csdl|res://*/mod.ssdl|res://*/mod.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=srv;Initial Catalog=db;User ID=vinodsrivastav;Password=nopassword;MultipleActiveResultSets=True&quot;
    
    0 讨论(0)
  • 2020-11-27 17:12

    In Entity-Framework Code-First use SqlConnection. You cannot use EntityConnectionStringBuilder because in code-first there is no metadata files.

    0 讨论(0)
  • 2020-11-27 17:20

    you should use the EntityConnectionStringBuilder class

    string providerName = "System.Data.SqlClient";
    string serverName = ".";
    string databaseName = "AdventureWorks";
    
    // Initialize the connection string builder for the
    // underlying provider.
    SqlConnectionStringBuilder sqlBuilder =
    new SqlConnectionStringBuilder();
    
    // Set the properties for the data source.
    sqlBuilder.DataSource = serverName;
    sqlBuilder.InitialCatalog = databaseName;
    sqlBuilder.IntegratedSecurity = true;
    
    // Build the SqlConnection connection string.
    string providerString = sqlBuilder.ToString();
    
    // Initialize the EntityConnectionStringBuilder.
    EntityConnectionStringBuilder entityBuilder =
    new EntityConnectionStringBuilder();
    
    //Set the provider name.
    entityBuilder.Provider = providerName;
    
    // Set the provider-specific connection string.
    entityBuilder.ProviderConnectionString = providerString;
    
    // Set the Metadata location.
    entityBuilder.Metadata = @"res://*/AdventureWorksModel.csdl|
                            res://*/AdventureWorksModel.ssdl|
                            res://*/AdventureWorksModel.msl";
    Console.WriteLine(entityBuilder.ToString());
    
    using (EntityConnection conn =
    new EntityConnection(entityBuilder.ToString()))
    {
    conn.Open();
    Console.WriteLine("Just testing the connection.");
    conn.Close();
    }
    
    0 讨论(0)
提交回复
热议问题