Comment créer une chaîne de connexion programmatique à MS SQL dans Entity Framework 6?
comment créer une chaîne de connexion programmatique à MS SQL dans Entity Framework 6?
j'utilise c# et WPF et je me demandais si quelqu'un pourrait me montrer comment ou me relier à une ressource qui montre comment configurer les chaînes de connexion de façon programmatique dans EF 6. L'article de MSDN explique que vous pouvez http://msdn.microsoft.com/en-us/data/jj680699#moving mais il ne va pas dans la création de véritables chaînes de connexion.
voici donc un exemple de EF6 fonctionne
App.Config
entityfram framework codeConfigurationType= " WPFwithEF.SqlConfiguration, WPFwithEF"> / entityfram framework
contexte
public class ProductContext : DbContext
{
public ProductContext():base("Wpf")
{ }
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
Configuration.cs
namespace WPFwithEF
{
public class SqlConfiguration : DbConfiguration
{
public SqlConfiguration()
{
SetProviderServices(SqlProviderServices.ProviderInvariantName,SqlProviderServices.Instance);
SetDefaultConnectionFactory(new SqlConnectionFactory());
}
}
}
mais si la base de contexte est "name=Wpf" alors cette configuration ne fonctionne pas y a-t-il un moyen de faire que cela fonctionne? Et je cherche le dernier EF6, pas l'ancienne façon de le faire.
4 réponses
Vous pouvez utiliser le EntityConnectionStringBuilder
comme décrit ici: comment: construire une chaîne de connexion EntityConnection
Si vous êtes particulièrement de la connexion à une base de données MS Sql, cela devrait fonctionner:
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;
}
utilisation:
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());
}
}
}
}
j'ai déjà utilisé la chaîne DefaultConnection trouvée dans l'application.config (ou web.config) à titre d'exemple et j'ai simplement remplacé le" connectionstring " sur le DbContext, par celui que je voulais.
la chaîne de connexion ressemblait à quelque chose comme :
Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-ShoppingList.Web-20150903103641.mdf;Initial Catalog=aspnet-ShoppingList.Web-20150903103641;Integrated Security=True
si je me souviens bien, vous devriez remplacer le cordon de connexion dans :
DbContext.Database.Connection.Connectionstring
PS. Vous ne pouvez l'utiliser de cette façon que si vous utilisez le Code-First. Si vous utilisez Model-First ou Database-First vous devriez utilisez le EntityConnectionStringBuilder .
vous pourriez utiliser le ConnectionStringPT nuget package. Il dispose de 3 méthodes:
- crée une chaîne de connexion au serveur sans nom de base de données
- crée la chaîne de connexion au serveur avec le nom de la base de données
- crée une chaîne de connexion pour le contexte de la base de données Entitefram Framework
dernière méthode sera la bonne pour vous et asssuming que votre edmx est nommé produit après invocation
ConnectionStringHelper.ConnectionString.GetSqlEntityFrameworkConnectionString
("serverName", "databaseName", "Product");
Paquet will retour:
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"