¿Cómo creo una cadena de conexión programáticamente para MS SQL en Entity Framework 6?

¿Cómo creo una cadena de conexión programáticamente para MS SQL en Entity Framework 6?

Estoy usando c # y WPF y me preguntaba si alguien podría mostrarme cómo hacerlo o vincularme a un recurso que muestre cómo configurar cadenas de conexión en EF 6. El artículo de MSDN explica que puede http://msdn.microsoft .com / en-us / data / jj680699 # se está moviendo pero no implica la creación de cadenas de conexión reales.

Así que aquí hay un ejemplo de EF6 que funciona.

App.Config

entityFramework codeConfigurationType = “WPFwithEF.SqlConfiguration, WPFwithEF”> / entityFramework

contexto

public class ProductContext : DbContext { public ProductContext():base("Wpf") { } public DbSet Categories { get; set; } public DbSet Products { get; set; } } 

Configuración.cs

 namespace WPFwithEF { public class SqlConfiguration : DbConfiguration { public SqlConfiguration() { SetProviderServices(SqlProviderServices.ProviderInvariantName,SqlProviderServices.Instance); SetDefaultConnectionFactory(new SqlConnectionFactory()); } } } 

pero si la base de contexto es “nombre = Wpf”, entonces esta configuración no funciona, ¿hay alguna manera de hacer que funcione? Y estoy buscando el último EF6, no la forma antigua de hacerlo.

Puede usar EntityConnectionStringBuilder como se describe aquí: Cómo construir una cadena de conexión EntityConnection

Si se está conectando específicamente a una base de datos MS Sql, esto debería funcionar:

 private DbConnection CreateConnection(string connectionString) { return new SqlConnection(connectionString); } private string CreateConnectionString(string server, string databaseName, string userName, string password) { var builder = new SqlConnectionStringBuilder { DataSource = server, // server address InitialCatalog = databaseName, // database name IntegratedSecurity = false, // server auth(false)/win auth(true) MultipleActiveResultSets = false, // activate/deactivate MARS PersistSecurityInfo = true, // hide login credentials UserID = userName, // user name Password = password // password }; return builder.ConnectionString; } 

cómo utilizar:

 public void ConnectoToDbWithEf6() { using(var connection = CreateConnection(CreateConnectionString("server", "db", "you", "password") { using(var context = new YourContext(connection, true)) { foreach(var someEntity in context.SomeEntitySet) { Console.WriteLine(someEntity.ToString()); } } } } 

consulte https://msdn.microsoft.com/en-Us/library/system.data.sqlclient.sqlconnectionstringbuilder%28v=vs.100%29.aspx

Anteriormente usé la cadena DefaultConnection que se encuentra en app.config (o web.config) como ejemplo y simplemente reemplacé la “cadena de conexión” en DbContext, por la que quería.

La cadena de conexión parecía algo así:

 Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-ShoppingList.Web-20150903103641.mdf;Initial Catalog=aspnet-ShoppingList.Web-20150903103641;Integrated Security=True 

Si estoy recordando correctamente, debes reemplazar la cadena de conexión en:

 DbContext.Database.Connection.Connectionstring 

PD. Solo puede usarlo de esta manera si está usando Code-First. Si está utilizando Model-First o Database-First, debe usar EntityConnectionStringBuilder.

Podría usar el paquete de nuget ConnectionStringPT . Tiene 3 métodos:

  • Crea una cadena de conexión al servidor sin nombre de base de datos
  • Crea una cadena de conexión al servidor con el nombre de la base de datos.
  • Crea una cadena de conexión para el contexto de la base de datos EntityFramework

El último método será el adecuado para usted y suponiendo que su edmx se llame Producto después de la invocación

 ConnectionStringHelper.ConnectionString.GetSqlEntityFrameworkConnectionString ("serverName", "databaseName", "Product"); 

El paquete volverá:

 metadata=res://*/Product.csdl|res://*/Product.ssdl| res://*/Product.msl; provider=System.Data.SqlClient;provider connection string="Data Source=serverName; Initial Catalog=databaseName;Integrated Security=True" 

Investigué esta pregunta hoy. en mi opinión, la solución más fácil no se menciona anteriormente.

¿Por qué no usar la clase SqlConnectionStringBuilder? (usando System.Data.SqlClient)

Aquí un ejemplo simple de cómo usarlo.

  SqlConnectionStringBuilder sqlb = new SqlConnectionStringBuilder(getConnectionString(DATABASENAME); using (SqlConnection connection = new SqlConnection(sqlb.ConnectionString)) ... ) // works for EF Core, should also work for EF6 (haven't tried this) private static string getConnectionString(string databaseName) { return "Data Source=SQLSERVERNAME;Initial Catalog="+databaseName+";Integrated Security=True"; }